尽管我阅读了大多数关于StackOverflow的文章,但实际上我现在对原型感到非常困惑。
function Foo() {
}
Foo.prototype.speak = function() {
console.log('Foo');
};
function Bar() {
}
console.log(Bar.prototype); // {}
Bar.prototype = Object.create(Foo.prototype);
console.log(Bar.prototype); // {} ----- (1)
Bar.prototype.speak = function() { // ----------(2)
console.log('Bar');
};
console.log(Bar.prototype); // { speak: [Function] } ----- (3)问题:
1)为什么(1)是Object.create之后的空对象。它不应该从speak method从Foo转一个带有Foo的对象吗?
( 2)我在(2)上到底在改变什么?Bar对象还是prototype对象?到底发生了什么?
( 3)发生在(3)上的事情。
4) [原型]如何参与所有这一切?我所知道的是,如果当前对象不包含属性,则使用[prototype]查找ups。
我敢肯定,.prototype !== [[prototype]]但是[[prototype]] === __proto__?
对不起,如果这是一个副本。因为尽管有许多类似的问题,但我似乎无法回答这些问题。。
发布于 2016-03-23 08:22:15
您不能通过简单地分配函数/对象来更改它的原型。您需要在创建对象时设置它,或者使用ES6特性来更改它。
所以,Bar.prototype = Object.create(Foo.prototype);没有任何意义。
[[prototype]]是对象的真实原型的内部表示。
也许您应该根据这些基本原理重新安排您的测试用例,并寻求解释。
https://stackoverflow.com/questions/36171366
复制相似问题