我们假设我定义了以下对象:
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);
但不幸的是,这不是很好的代码。还有另一种方法可以优雅地解决这个问题吗?
答案 0 :(得分:3)
更正的示例,在正确设置时满足您的需求
myObj.prototype.sayHello = function(){
var persons = ["Jim", "Joe", "Doe","John"];
persons.forEach(function(person){
console.log(this.hello + person);
},this);
}
答案 1 :(得分:3)
这似乎不是一个糟糕的解决方案......也许你会对使用Function.bind更感兴趣(参见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind#Compatibility的兼容性),但这会导致反作用......
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);
});
}
答案 2 :(得分:0)
如果您没有在$ .each范围之外定义变量,则无法找到它。您必须在$ .each函数外部进行定义才能调用。否则它将是一个未定义的对象。
如果您想定义参考,请查看以下网址:Pass additional parameters to jQuery each() callback