Object 在原型上保留“this”';s对象

Object 在原型上保留“this”';s对象,object,coffeescript,prototype,this,Object,Coffeescript,Prototype,This,我正在尝试构建一个小型javascript库以供学习。我在原型中有一个对象,里面有一些函数。我想从函数内部访问this(具有valueOf等内容的函数),但是this现在只提供函数的对象父对象 我的代码(咖啡): 这可能吗?我知道我在重新发明轮子,但正如我所说的,这是为了学习,所以这就是我的想法。如果我正确理解了你的问题,解决方法就是=>操作符 我不能100%确定OP所指的“这个”,但我会尝试回答: 让我们首先将咖啡脚本代码编译为javascript: HTMLElement.prototype

我正在尝试构建一个小型javascript库以供学习。我在原型中有一个对象,里面有一些函数。我想从函数内部访问
this
(具有
valueOf
等内容的函数),但是
this
现在只提供函数的对象父对象

我的代码(咖啡):


这可能吗?我知道我在重新发明轮子,但正如我所说的,这是为了学习,所以这就是我的想法。

如果我正确理解了你的问题,解决方法就是=>操作符


我不能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
是一个对象,函数
b
中的
将绑定到
a
。在您的情况下,您可能会这样调用函数:

element.on.click(...);
问题在于
元素本身就是一个对象。表达式的计算结果将为

(element.on).click(...);
单击功能中的
的值将是对象
原型。在
上,而不是
元素

基本上,不要那样做。将
绑定到HtmleElement实例将是一件痛苦的事情。将函数直接放在原型上。我能想到的唯一解决办法(糟糕,我感到羞耻)是:


简言之:不,不可能。你指的是哪个
这个
?你说了“(一个有价值的东西)”但我不明白。可能是重复的,或者我相信是重复的,但我以前没见过这个问题。我会检查它是否回答了我的问题…@Alberto:this
包含
HTMLElement
实例的数据。这确实是我的问题。现在我只需要一个比重复
元素
更好的解决方案,但我开始认为这在javascript中是不可能的(也就是说,如果在JS中有些东西是不可能的)。@AndréLeria好吧,只需在原型上放函数,而不是对象。您可以有prototype.onClick或prototype.bind('click',function(){…})之类的东西。我知道,但这已经存在了。我只是想把事情安排得更好。但我想我已经解决了这个问题,我可能很快就会把我的解决方案发布到这里…@AndréLeria我不认为这是“更好的组织”,但你可以做一些像
函数EventHandler(element){…}
function Element(){this.on=new EventHandler(this);}
这看起来是一个不错的选择。我在想类似的事情,但直接建立在咖啡课之上。解决方案基本上是在另一个对象中保留
的实例,因为
本身将始终被覆盖。
(element.on).click(...);
element.on.click.bind(element)(...)