创建对象三种方式:
- 对象直接量
- 使用new关键字
- Object.create()
对象直接量
对象直接量是由若干名/值对组成的映射表,名和值用分号隔开,对之间用逗号隔开,整个映射表用花括号括起来,名值对称为属性
var empty = {} //没有任何属性的对象
var point = {x:12,y:21}
var person = {
name:'Mike',
age:31
}
对象直接量是一个表达式,表达式的运算会创建并初始化一个对象。
使用new
new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用,称为构造函数(constructor)。
var o = new Object()//创建一个空对象{}
var a = new Array() //创建一个空数组 []
var d = new Date() //创建一个表示当前时间的Date对象
var r = new RegExp('js') //创建一个正则表达式对象
以上是内置的构造函数,用户也可以自定义构造函数。
原型
要理解Object.create()方式,先要了解原型链的知识。
几乎每一个javascript对象都有与之关联的对象,称为原型对象,一个对象从它的原型对象继承属性。注意原型对象不是类,而是一个真实的对象,这和基于类的继承要区分开。
引用对象原型:
- 对象直接量和new Object()创建的对象继承自Object.prototype。
- 通过new+构造函数创建的对象的原型是构造函数的prototype属性,比如new Array()创建的对象原型是Array.prototype。
只有很少的对象没有原型,Object.prototype是其中之一,它不继承任何属性。
所有的内置构造函数都有继承自Object.prototype的原型,比如Date.prototype的属性继承自Object.prototye,所以new Date()创建的对象继承了Date.prototype和Object.prototype的属性。这种链型继承关系称为原型链(prototype chain)。
Object.create()
Object.create(原型对象)创建一个新的对象,它是一个静态函数,不是某个对象的调用方法。
var o1 = Object.create({x:1,y:2})
o1.x //1
o1.__proto__ //{x:1,y:2}
o1.x = 5
o1.__proto__ //{x:1,y:2}
o1.x //5
可以通过传入null作为参数创建一个没有原型的新对象,这种对象没有继承任何属性和方法。
var o2 = Object.create(null)
o2.__proto__ //undefined
使用Object.create()创建一个空对象Object.create(Object.prototype)
,等同于{}
和new Object()
。
任意对象都可以当做原型对象创建新对象,即所有的对象都可以被继承。
var o = {x:1,y:2}
var o1 = Object.create(o)
var o2 = Object.create(o)
o2.__proto__.x = 10
o1.__proto__.x //变成10了
网友评论