尽管阅读了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
转换对象吗?
2)我实际上在改变什么(2) ?? Bar
对象或prototype
对象?实际发生了什么?
3)(3)。
发生了什么4)[[prototype]]如何参与所有这些?我所知道的是,如果当前对象不包含属性,[[prototype]]用于查找。
确定,.prototype !== [[prototype]]
但是[[prototype]] === __proto__
?
很抱歉,如果这是重复的话。因为尽管存在多个类似的问题,我似乎无法回答这些问题。
答案 0 :(得分:-1)
您不能通过简单地尝试分配它来更改函数/对象的原型。您需要在创建对象时设置它,或者您应该使用ES6功能来更改它。
所以,Bar.prototype = Object.create(Foo.prototype);
没有任何意义。
[[prototype]]
是对象的真实原型的内部表示。
可能您应该根据这些基本原则重新安排您的测试用例并寻求解释。