我不明白以下行为:
var Foo = function () {};
var Bar = function () {};
Foo.prototype = Bar;
var foo = new Foo();
console.log(foo.prototype === Bar.prototype); // true, but why?我在规格中找不到任何关于使用构造函数创建的对象上prototype属性的默认值的信息。(我确实找到了规范的这一部分,其中提到,对于函数,prototype属性默认为new Object(),但没有提到使用构造函数创建的对象。)
所以,我的问题是双重的:
使用构造函数创建的对象的prototype属性的默认值是什么?(它似乎是构造函数的prototype属性的prototype属性;例如,Foo.prototype.prototype)
在规范中,它是如何解释这种行为的?
发布于 2013-07-24 19:11:23
构造对象的原型是构造函数的.prototype属性引用的对象。
因为foo.__proto__ === Bar,很明显是foo.__proto__.prototype = Bar.prototype。
foo对象没有.prototype属性,它是在foo.__proto__中查找和发现的,因为对象的原型是一个具有prototype属性的函数对象,这就是您遗漏的内容。
https://stackoverflow.com/questions/17842122
复制相似问题