首页 > 如何理解Javascript中类和对象这两个概念?

如何理解Javascript中类和对象这两个概念?

如何理解Javascript中类和对象这两个概念?


Javascript中的function作为构造函数时,就是一个类,搭配上new操作符,可以返回一个对象。
当然,要生成一个对象,也可以用字面量的形式,例如var obj = {x: 1, y: function(){} };
类可以理解为一个模板,而对象就是根据这个模板造出来的具体实例。

写的比较简洁,希望有所帮助。


各种语言的类和对象都是差不多的。。。

类:比如人类,指的是一个范围;
对象:比如某个人,指的是这个范围中具体的对象。


其他语言没什么大区别,区别在JavaScript中类实现方式。

类 :对一群具有相同特征的对象的集合的描述;
对象:真实存在的对象个体;

举个简单的例子:“最近养了一个动物,就是我家的小猫”。在这里里面:
动物——>类
我家的小猫——>对象


首先要理解的是Javascript语言层面没有“类”的概念。一切皆对象,继承靠原型链,多态靠弱类型,封装……虽然可以靠闭包,但我个人更推崇和python一样的,下划线代表私有的风格

题目太大一次写不完……有空慢慢维护吧


js里一切皆对象,类则是用用对象的方法模拟了传统编程语言中的类概念,包含了属性,扩展,继承等等


Javascript 没有提供“类”这种语法结构,也就是类似 Java 语言里的 class,不过 Javascript 的确有保留 class 这一关键字。

Javascript 是面向对象语言,比 Java 还要彻底的面向对象。在 Javascript 中使用“构造器”来实现对象的类型化。构造器就是函数,惯例是首字母大写函数名来代表这是一个构造器,用 new构造器名字 来创建实例对象,在构造器(及其原型属性对象)内部,this 指代实例对象。

Javascript采用“原型继承”而不是“类型继承”,通过对象的原型链进行属性(方法)的查找。

以上细节可参看我博客里的《理解 Javascript》系列。

至于对象,Javascript 里几乎一切都是对象(除了个别特例)。很多人简单的把 JSON 视作 Javascript 对象简直是大谬!Javascript 采用 {} 作为基本对象类型(Object)的字面量表达形式,而 JSON 则是借鉴这种形式创造出来的一种数据格式而已,形似而神非。

如何理解对象和类?

只要记住一句话:

面向对象,而不是面向类。

类只是我们用来组织对象和构造程序的一种形式,它本质上源自于人们对于现实世界中的一种概念映射,即:凡是具有共同点的部分便可以抽象成一类,抽象层次越高,类在继承体系中的层级越高(或者说越低,看你从哪个方向来看了,总之就是越来越基础,直到成为一切衍生类型的始祖)。

相应的,在 Javascript 里,一切对象归根结底都是源自于 Object,如果你扩展(重载)了 Object 的原型(Javascript 基于原型继承),那么其他的一切对象都可以获得这些扩展(重载)。所以在 Javascript 的世界里,类不是必须的,没有类一样可以面向对象。

我们采用构造函数来模拟类,只是为了能在应用的业务领域里重现基于类语言的那种类型化(更容易和我们看待事物的方式相匹配),但是由于一些语言设计上的不足甚至是错误,使得 Javascript 很难完整的实现经典类型系统。比如说要实现私有成员属性,就要先理解 Closure(闭包),这对很多初学者来说是一个障碍(但有的时候你更应该问问自己:我非得这样做不可吗?)。

你要抛开形式上的对比,直入去理解对象的本质。在更高版本的 Javascript 里(harmony),将直接实现基于 class 的类型系统(未定),届时构造器的繁琐实现应当会成为历史了,但是面向对象的本质并没有变,Javascript 还是可以不必非用类来写程序。

Javascript 被设计成一种非常灵活的编程语言,我们不应把目光局限在经典的类型系统中(别学 Java 那一套,不合适),还有其他很广阔的应用场景,比如元编程,比如函数式编程等等都值得你去了解和尝试。

法无定法,因而幻化无穷。这就是对象。

【热门文章】
【热门文章】