Object.create(parent)vs Object.create(parent.prototype)

时间:2016-02-20 18:22:40

标签: javascript object inheritance

我的问题是关于javascript中的继承。所以,当你有

child.prototype = Object.create(parent.prototype) 

您正在将子类的原型设置为父类原型的副本。如果您在控制台中签入,子类的__proto__属性将直接显示__proto__: parent。到现在为止还挺好。但是当你做那样的继承 -

child.prototype = Object.create(parent) 

子项的__proto__属性显示__proto__: function parent(),此函数的属性原型具有键值prototype: parent。两者的实例行为相同。显然,编译器应该只需要更多一步来查找原型中的函数。存在某种差异,但它是如此重要,因此Object.create(parent.prototype)是首选。任何人都可以用简单的方式解释这个吗?

1 个答案:

答案 0 :(得分:2)

javascript中最令人困惑的陷阱之一是.prototype和"原型"是不同的事情。在您的示例中,第一个对象的属性通过parent.prototype解析,而第二个使用"父级"原型"又名parent.__proto__。考虑:

function parent() {};

var a = Object.create(parent.prototype); 
var b = Object.create(parent);

这是此代码的继承图:

enter image description here

如您所见,ab的原型链完全不同。