胖箭头可以在不同的设置中使用,但不知何故不能
总是绑定(bind)到我想要的实例。
最佳答案
胖箭绑定(bind)了3次
1.声明方法时
当 Coffeescript 编译器遇到以下语法模式时
在类声明中
class A
somemethod: (paramlist) =>
这将在类 A 的构造函数中产生以下代码
this.somemethod = __bind(this.somemethod, this);
那就是该实例的定义是覆盖初始分配
带有函数的绑定(bind)版本
2.在方法中声明函数时
当您在方法中定义带有粗箭头的函数时,Coffeescript 编译器
自动创建闭包和阴影这个将外部方法放入变量中
_这个 .对 的任何引用@ 在内部函数中将使用变量 _这个
在生成的 javascript 代码中
somemethod: ->
=> @someCall()
这是相应的Javascript
A.prototype.somemethod = function() {
//_this references this
var _this = this;
return function() {
//and _this is now used within the inner function
return _this.someCall();
};
};
没有粗箭头的函数定义不会为您创建该闭包。
3. 在全局上下文中声明函数时
如果您像这样定义一个自由 float 函数(意思是类中的方法而不是另一个函数/方法中的方法)
foo = => @bar
那么对应的Javascript会是这个样子
var foo,
_this = this;
foo = function() {
return _this.bar;
};
这里再次有趣的是 this 被分配给 _this,这使得 foo 的定义能够关闭 _this。
然而,重要的部分是这始终是您的执行环境的全局上下文。如果您在浏览器中,它将是窗口对象。如果您正在运行 node.js,它将是您刚刚运行的模块。
警告:无论如何,您都不应该定义任何访问全局上下文的函数。这需要麻烦。
关于coffeescript - "fat arrow"(=>) 何时绑定(bind)到 "this"实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184209/