jquery使用它在内部回调时访问对象上下文

我们假设我定义了以下对象:

var myObj = function(){ this.hello = "Hello,"; } myObj.prototype.sayHello = function(){ var persons = {"Jim", "Joe", "Doe","John"}; $.each(persons, function(i, person){ console.log(this.hello + person); } } 

问题是在$ .each中这是指人,但我想访问obj属性你好。

我能找到的唯一解决方案是在sayHello函数中声明类似的东西

var _this = this;

然后在$ .each中我会使用类似的东西

 console.log(_this.hello + person); 

但不幸的是,这不是很好的代码。 还有另一种方法可以优雅地解决这个问题吗?

这似乎不是一个糟糕的解决方案……也许您会对使用Function.bind更感兴趣(请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind#Compatibility for兼容性),但这会导致反作用……

 var myObj = function(){ this.hello = "Hello,"; } myObj.prototype.sayHello = function(){ var persons = ["Jim", "Joe", "Doe","John"]; $.each(persons, function(i, person){ console.log(this.hello + person); }.bind(this) ); } 

另一个解决方案是声明一个变量并将其值设置为this.hello,如下所示:

 var myObj = function(){ this.hello = "Hello,"; } myObj.prototype.sayHello = function(){ var persons = ["Jim", "Joe", "Doe","John"], hello = this.hello; $.each(persons, function(i, person){ console.log(hello + person); }); } 

一个更正的例子,满足您对正确设置的需求

 myObj.prototype.sayHello = function(){ var persons = ["Jim", "Joe", "Doe","John"]; persons.forEach(function(person){ console.log(this.hello + person); },this); } 

查看Array.forEach以获取更多信息。

如果没有在$ .each范围之外定义变量,则无法找到它。 您必须在$ .each函数外部进行定义才能调用。 否则它将是一个未定义的对象。

如果要定义引用,请查看以下URL:将其他参数传递给jQuery each()回调