我正在尝试构建一个用于学习目的的小型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
这可能吗?我知道我有点重新发明轮子,但正如我所说,这是出于研究目的,所以这就是我的想法。
答案 0 :(得分:1)
我对OP所指的“这个”并不是100%肯定,但我会尽力回答:
让我们首先将您的咖啡脚本代码编译为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)(...)
答案 1 :(得分:0)
如果我正确理解您的问题,解决方案是=>操作者。