原型中的“ this”指的是什么?

时间:2019-05-10 18:39:20

标签: javascript inheritance prototype lexical-scope

假设我们有以下示例:

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的变量吗?

1 个答案:

答案 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"); 。在这种情况下,initthisb1会将“ Kristopher”分配为init的{​​{1}}。

b1

您使用“简”作为参数调用了me。在这种情况下,b2.init("Jane"); initthis会将“简”分配为b2的{​​{1}}。

init

打印两个对象的b2

一种更简单的说法是,me的值在您编写时并没有固定(这使您认为它是b1.speak(); b2.speak(); )。这取决于调用函数时调用函数的方式。

me