考虑以下代码:

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

10-06 03:12