考虑以下代码:
var oNew = Object.create(MyConstructor.prototype);
假设
MyConstructor
在构造函数中定义了“自己的”数据成员。 oNew
会继承那些数据成员吗? oNew
会继承所有MyConstructor.prototype
方法吗?同样,MyConstructor.prototype
本身也可以从对象(例如new f()
)继承。 最佳答案
假设MyConstructor
在构造函数中定义了“自己的”数据成员。 oNew将继承那些数据成员吗?
不,不会。原型的constructor
函数有意与原型分离。 Object.create
的主要优点之一是,它使您可以将对象创建过程与对象实例化过程分开(使用new
调用构造函数会将两者结合在一起)。
oNew会继承所有MyConstructor.prototype
方法吗?
是的,即使使用Object.create
,也将继承直接分配给原型的属性。
演示版
function MyConstructor () {
this.ownProperty = 'value'
}
MyConstructor.prototype.inheritedProperty = 'value'
var createdObject = Object.create(MyConstructor.prototype)
console.log(createdObject)
console.log('inheritedProperty' in createdObject) //=> true
console.log('ownProperty' in createdObject) //=> false
var constructedObject = new MyConstructor()
console.log(constructedObject)
console.log('inheritedProperty' in constructedObject) //=> true
console.log('ownProperty' in constructedObject) //=> true