假设我们有以下示例:
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 ad b2的变量吗?
答案 0 :(得分:1)
让我们分解一下:
adb exec-out run-as projectname cat databases/my.db > my.db
adb exec-out run-as projectname cat databases/my.db-shm > my.db-shm
adb exec-out run-as projectname cat databases/my.db-wal > my.db-wal
这些行使用const b1 = Object.create(Foo);
const b2 = Object.create(Foo);
作为原型创建两个单独的实例。
Foo
您以“ Kristopher”作为参数调用了b1.init("Kristopher");
。在这种情况下,init
是this
。 b1
会将“ Kristopher”分配为init
的{{1}}。
b1
您使用“简”作为参数调用了me
。在这种情况下,b2.init("Jane");
是init
。 this
会将“简”分配为b2
的{{1}}。
init
打印两个对象的b2
。
一种更简单的说法是,me
的值在您编写时并没有固定(这使您认为它是b1.speak();
b2.speak();
)。这取决于调用函数时调用函数的方式。
me