【发布时间】:2019-05-10 18:39:20
【问题描述】:
假设我们有以下示例:
const Foo = {
init: function(who) {
this.me = who;
},
speak: function() {
console.log(this.me);
}
};
然后我们有了原型引用 foo 的新对象:
const b1 = Object.create(Foo);
const b2 = Object.create(Foo);
b1.init("Kristopher");
b2.init("Jane");
b1.speak();
b2.speak();
输出如下:
Kristopher
Jane
但我希望“this”指的是原型函数的上下文。如果每个新对象仅引用原型,我认为会输出以下内容:
Jane
Jane
为什么不是这样?我想既然 Foo 是 b1 和 b2 的共享原型,那么修改 this.me 会覆盖 b1 和 b2 的变量?
【问题讨论】:
-
this指的是 current 调用上下文。在这种情况下,这是由Object.create创建并存储在例如b1中的实例。原型不受影响。如果是这样,那么如果从原型继承的所有东西都只修改该原型,那么整个原型链将毫无用处。 -
@VLAZ 太棒了,谢谢。你能回答我吗,这样我就可以接受了
标签: javascript inheritance prototype lexical-scope