【发布时间】:2014-02-28 14:17:40
【问题描述】:
标题说明了一切。当我在 CoffeeScript 中使用胖箭头时,它会在调用函数之前先存储this。例如:
class myClass
constructor: ->
element = $ "#id"
element.click ->
@myMethod(@value)
return
return
myMethod: (c)->
window.console.log(c)
return
会产生
var myClass;
myClass = (function() {
function myClass() {
var element;
element = $("#id");
element.click(function() {
this.myMethod(this.value);
});
return;
}
myClass.prototype.myMethod = function(c) {
window.console.log(c);
};
return myClass;
})();
现在在 JavaScript 的第 8 行,this.myMethod 是错误的。在此范围内,this 指的是element,而不是类MyClass。
但是,如果在 CoffeeScript 的第 4 行,我将 element.click -> 替换为 element.click =>,JavaScript 中的第 8 行将变为 _this.myMethod(_this.val),其中引用 myClass 的 this 在调用函数之前存储在 _this .但是_this.value 是未定义的,即使它已定义,我在这里尝试访问的对象也是element(在此函数范围内由实际的this 关键字引用)。
现在如何访问实际的this?
【问题讨论】:
标签: syntax coffeescript scope this arrow-functions