我有这个代码:
PageList: function(url, index, classes){
this.url = url;
this.index = index;
...
};
PageList.prototype.toHTML = function(){
var div = $('<div class="container"></div>');
var p = $('<p></p>');
var link = $('<a></a>');
$.each(this.elements, function(index, array_value){
console.log(this.url);
...
}
}
它按预期工作。
问题是console.log(this.url)
正在打印undefined
,所以我将代码修改为如下所示:
PageList.prototype.toHTML = function(){
var div = $('<div class="container"></div>');
var p = $('<p></p>');
var link = $('<a></a>');
var instance = this;
$.each(this.elements, function(index, array_value){
console.log(instance.url);
}
}
我知道问题出在闭包上,没有将this
实例的值作为实例的值,但据我所知this
,对没有绑定实例的函数内部的引用必须引用窗口对象,而不是undefined
,至少在许多浏览器上都是这样。
那么我的代码到底发生了什么。
注意:我正在使用 jQuery 并且this.elements
已经定义。
编辑:现在我发现这$.each
是一个非实例函数,所以我的回调被调用,$.each
但它必须是window
对 的引用this
,仍在考虑它。