为什么不胖箭头绑定到这个时候我管我的方法定义直通中介功能?(Why doesn't the

2019-08-02 05:38发布

我有以下的代码,声明其通过中介功能通知之前函数结果被分配给原型时隙的方法。

class A
    somemethod: advise => @dosomething()

为什么脂肪箭头不绑定在这种情况下,实例?

Answer 1:

答案很简单

当中介的原型插槽名称和功能定义之间把你打破句法模式,使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的编译器不知道如何,因为在创建对象的时候了,不再给匿名函数的访问发出构造函数中的绑定代码。

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



文章来源: Why doesn't the fat arrow bind to this when I pipe my method definition thru an intermediary function?