ECMAScript是一门面向对象的编程语言,它基于原型,以对象作为其核心概念。(对象很重要,无论对编程语言,还是对人)
对象是某个特定引用类型的实例,也称作引用类型的值,而引用类型在ES中是一种数据结构,用于将数据与功能组织在一起,类似“类”的概念。
定义: 对象是属性的集合,并且有一个原型对象。原型要么是一个对象,要么是null值。(原型对象用于以动态调度机制实现继承)。
对象具有以下几个特点:
(1)唯一标识性:即使属性完全相同的两个对象,也并非同一个对象。(一般唯一标识性是通过对象的内存地址来体现的);
(2)对象有状态:同一对象可能处于不同的状态中;
(3)对象有行为:对象的状态可能因为其行为产生变化。
对于状态和行为,在Java中的对应术语为“属性”和“方法”;不过在JS中,只有一个术语,叫“属性”。此外,JS中对象独有的特色是:对象具有高度的动态性,可以在运行时为对象添加或者修改其状态或行为。
更多关于JS的对象介绍,请看JS对象。
一个对象的原型是被内部的[[Prototype]]属性引用,通过__proto__属性暴露给用户级代码。先看一个简单的对象示例,其结构中带有两个显式的自有属性( x和y)和一个隐式的__proto__属性(__proto__属性是对point的原型的引用)


对象可通过执行new操作符后跟要创建的对象类型名称来创建,如 var o = new Object();
Object类型,是所有对象的基础,其具有的任何属性和方法也存在于所有对象中。Object的每个实例都具有以下基本属性或方法:
(1)constructor: 保存用于创建当前对象的函数。
(2)hasOwnProperty(propertyName):用于检查给定属性是否存在当前对象实例中(不会在原型链中上溯)。
(3)isPrototypeOf(object): 用于检查传入的对象是否是另一个对象的原型。
(4)propertyIsEnumerable(propertyName):用于检查指定属性能否使用 for-in 语句来枚举。
(5)toLocalString(): 返回对象的字符串表示,与执行环境有关。
(6)toString(): 返回对象的字符串表示。
(7)valueOf(): 返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同。
Notes: typeof 操作符用来检测给定变量的数据类型。
(1) typeof null = "object",因为null被认为是一个空的对象引用;
(2)typeof 一个函数 = "function",虽然函数在ECMAScript中也是对象,但因为它具有特殊属性,有必要与其他对象区分开来。
(3)null == undefined 是成立的(ECMA-262规定的)
网友评论