私はこのコードを持っています:
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