0

我正在尝试为学习目的构建一个小型 javascript 库。我在原型中有一个对象,里面有一些功能。我想从函数内部访问this(有valueOf东西的那个),但this现在只给我带来了函数的父对象。

我的代码(咖啡):

HTMLElement.prototype.on =
  click: (action) -> @valueOf().addEventListener('click', action, false)
                     # I'd like this to work,
                     # but `this` here refers to the `on` object

这可能吗?我知道我有点重新发明轮子,但正如我所说,这是出于学习目的,所以就是这样。

4

2 回答 2

1

我不是 100% 确定 OP 所指的“这个”,但我会尝试回答:

让我们首先将您的咖啡脚本代码编译为 javascript:

HTMLElement.prototype.on =
  click: (action) =>> @valueOf().addEventListener('click', action, false)

HTMLElement.prototype.on = {
  click: function(action) {
    return this.valueOf().addEventListener('click', action, false);
  }
};

好的没问题。在 javascript 中this,函数中的值可以由许多因素决定,其中之一是 MemberExpression。当您使用 调用函数时a.b(),其中a是一个对象,this函数内部b将绑定到a. 在您的情况下,您可能正在调用这样的函数:

element.on.click(...);

问题在于它element.on本身就是一个对象。表达式将计算为

(element.on).click(...);

并且函数this中的值click将是对象prototype.on,而不是element

基本上,不要那样做。this绑定到 HTMLElement 实例会很痛苦。把函数直接放在原型上。我能想到的唯一解决方案(可怕,让我感到羞耻)是:

element.on.click.bind(element)(...)
于 2013-09-02T21:22:03.527 回答
0

如果我正确理解您的问题,则解决方案是 => 运算符。

http://coffeescript.org/#fat-arrow

于 2013-09-02T13:20:12.727 回答