为什么当我通过中介函数管道传输方法定义时,胖箭头没有绑定到这个?



i具有以下代码,该代码声明了一种由中间人建议的方法在将功能结果分配给原型插槽之前的功能。

class A
    somemethod: advise => @dosomething()

为什么在这种情况下,脂肪箭头不与实例结合?

简单答案

将中介放置在原型插槽名称和函数之间定义您打破使CS发射的句法模式构造函数中的绑定代码

class A
    foo: (paramlist) =>
    bar: ()=>
    baz: =>

所有这些方法定义在生成的JavaScript构造函数

中发出此代码
function A() {
    this.foo = __bind(this.foo, this);
    this.bar = __bind(this.bar, this);
    this.baz = __bind(this.baz, this);
}

如果在两者之间放了一些东西,则打破了句法模式Coffeescript编译器可以识别该模式并生成必要的代码。

class A
    helpWhereIsMyMethod: processTheFollowing => @doSomething()

在这种情况下,在构造函数中没有绑定调用

更复杂的答案

定义原型插槽(名称)并立即分配(匿名)函数时您对此有效创建了一个手柄,您可以稍后访问该功能和"处理"或称为(大多数情况)。

如果您将功能置于另一个功能(中介),然后再绑定结果对于原型插槽,您有效地创建了一个匿名函数,您以后将无法访问。

因此,CoffeeScript编译器不知道如何发射构造函数中的绑定代码因为在对象创建时间期间,不再给出对匿名函数的访问。

中介功能也可以生成其自己的代码,并发出此新代码以绑定到原型插槽。

最新更新