我试图在我创建的对象中引用this.foo,但这是引用触发该函数的HTML元素。有没有什么办法可以在通过事件调用对象时保留对象的引用?
这是一个正在发生的事情的例子:
$('document').on('click','button',object.action);
var object = {
foo : null,
action : function(){
this.foo = "something";
}
};
我会收到的错误是
Uncaught TypeError: Object #<HTMLInputElement> has no variable 'var'
答案 0 :(得分:2)
如果你想保留this
,你应该附上你的事件:
$('document').on('click','button',function() { object.action() });
此外,如果您在问题中使用此对象,则也可以使用object
代替this
:
var object = {
foo : null,
action : function(){
object.foo = "something";
}
};
此外,您可能希望熟悉Bind,Call和Apply - jQuery在幕后使用这些内容将您的this
替换为HTML元素; < / p>
此外,var
是保留关键字,您不应将其用作属性名称;如果你真的想这样做,请使用字符串"var"
并通过[]
表示法访问它:
var a = {"var": 1}
a['var']
答案 1 :(得分:0)
将this.var
更改为object.var
this
引用调用位置的上下文的问题。
您可以点击按钮上的点击事件致电object.action
,因此此处this
为#<HTMLInputElement>
。
而且,正如已经说过的那样,不要使用像var
这样的保留字作为变量名
答案 2 :(得分: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
,但这很可能是因为var
在JavaScript中使用了reserved word。
答案 3 :(得分:0)
var ist 保留字。
这很好用:
$(document).ready(function(){
var myObj = {
myVal: null,
action:function(){
this.myVal = "something";
}
};
myObj.action();
console.log(myObj.myVal);
});
我希望我能提供帮助。