原型方法对提取的约束力是什么意思?

时间:2018-04-22 20:22:23

标签: javascript

在阅读为什么ES6课程方法不会自动绑定"这个"对于该方法,我看到答案说"原型方法不会在提取上绑定"但这对我来说没有任何意义。什么"绑定提取"意思?

调用函数时

obj.func()

"对提取的约束意味着"?

我发现相关的文章是:

2 个答案:

答案 0 :(得分:5)

提取基本上意味着将方法与对象断开连接。您可以在调用方法时执行此操作,而无需将其“链接”到类实例。

class Test {
  constructor(r) {
    this.r = r;
  }
  sample() {
    console.log(this);
  }
}

let t = new Test(1);
t.sample();
let q = t.sample;
q();

因此,在此示例中,当我调用t.sample()时,它会返回我期望的内容:{ r:1 }。但是当我设置q = t.sample然后调用q()时,我得到了未定义。我已“提取”了我的功能并将其分配给另一个变量。

如果您将该函数用作事件处理程序,则会发生同样的事情。

答案 1 :(得分:0)

想象一下你有一些课程:

tf.data

有人这样做:

class C {
  foo() {
    console.log(this);
  }
}

应该将哪个对象记录到控制台? const c = new C(); const o = { callback: c.foo // "extract the function" } o.callback(); ,因为它最初宣布了该方法,或c,因为我们在呼叫网站上指定的是什么?

JavaScript默认为后者,但您可以通过调用Function.prototype.bind来实现前者。

也就是说,他们讨论的问题是类方法是否应该在从对象中检索时自动绑定到o,确保this始终引用方法最初来自的对象,如与调用者用来进行调用的对象相对。