我有以下代码声明了一个由中间人建议的方法 函数结果分配给原型槽之前的函数。
class A
somemethod: advise => @dosomething()
为什么胖箭头在这种情况下不会绑定到实例?
答案 0 :(得分:0)
当中间件放在原型槽名称和功能之间时 定义你打破了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编译器不知道如何在构造函数中发出绑定代码 因为在对象创建期间,不再提供对匿名函数的访问。
此外,中间函数可以生成自己的代码并发出这个新代码以绑定到原型槽。