关于Object.create()方法
1、Object.create()可以帮我们生成一个对象,通过传参,可以将生成的对象的原型指向第一个参数,可以模拟Object.create()实现过程:
Object.create1 = function(proto){
function F() {}
F.prototype = proto
return new F()
}
// 测试
var obj = {
name: 'Ryan'
}
var obj1 = Object.create1(obj)
var obj2 = Object.create(obj)
obj1.name // Ryan
obj2.name // Ryan
obj1.__proto__ === obj // true
obj2.__proto__ === obj // true
2、在阅读vue等框架源码时会看到作者在创建一个空对象时,常常使用Object.create(null)
,这样做的目的是防止Object构造函数的原型被修改时对新建的对象产生影响,如下例子:
// 未使用Object.create(null)创建对象
var obj = Object.create({})
obj.name // undefined
Object.prototype.name = 'Ryan'
obj.name // Ryan
// 使用Object.create(null)创建对象
var obj = Object.create(null)
obj.name // undefined
Object.prototype.name = 'Ryan'
obj.name // undefined
3、Object.create()有两个参数,第一个参数为新创建对象的原型,必填参数;第二参数是添加到新创建对象的属性名及其属性描述符;
var obj = Object.create({}, {
name: {
value: 'Ryan',
writeable: true,
configurable: true,
enumerable: true
}
})
obj.name // Ryan