0

我试图在我创建的对象中引用 this.foo ,但是这是引用触发该函数的 HTML 元素。当通过事件调用对象时,有什么方法可以在对象中保留对 this 的引用?

这是正在发生的事情的一个例子:

$('document').on('click','button',object.action);

var object = {
  foo : null,
  action : function(){
    this.foo = "something";
  }
};

我会收到的错误是

Uncaught TypeError: Object #<HTMLInputElement> has no variable 'var' 
4

4 回答 4

2

如果你想保留this,你应该像这样附加你的事件:

$('document').on('click','button',function() { object.action() });

此外,如果您使用问题中显示的此对象,您也可以使用object而不是this

var object = {
  foo : null,
  action : function(){
    object.foo = "something";
  }
};

此外,您可能想熟悉BindCallApply - jQuery 在幕后使用这些来替换您this的 HTML 元素;

此外,var是一个保留关键字,您不应该将其用作属性名称;如果您真的想这样做,请使用字符串"var"并通过[]如下符号访问它:

var a = {"var": 1}
a['var']
于 2013-09-26T15:50:53.417 回答
0

更改this.varobject.var

this指的是从哪里调用它的上下文的问题。您object.action从按钮上的点击事件中调用,这里this也是#<HTMLInputElement>

而且,正如已经说过的,不要使用保留字var作为变量名

于 2013-09-26T15:50:15.007 回答
0

您可以使用.apply()object作为值传递:this

$('document').on('click','button',function(){object.action.apply(object); });

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

this应该引用object,但不太可能,因为在 JavaScript中使用varwhich 是保留字。

于 2013-09-26T15:53:22.037 回答
0

var ist JavaScript 中的保留字。

这工作正常:

  $(document).ready(function(){

var myObj = {
  myVal: null,
  action:function(){
    this.myVal = "something"; 
  }

};
myObj.action();
console.log(myObj.myVal);

});

这里链接到 JS Bin

我希望我能帮上忙。

于 2013-09-26T15:55:33.860 回答