我試圖寫一個新的插件,可以對多個元素在同一頁面內被初始化,使用不同的選項,每次,EX插件:jQuery的多個實例使用「this」中的setTimeout
$('#id').plugin({ option:true });
$('#id2').plugin({ option:false });
我使用jqueryboilerplate.com的樣板(https://github.com/jquery-boilerplate/jquery-boilerplate)。我理解(至少我認爲我是這麼做的),問題是在匿名函數的範圍內(這裏,在setTimeout內),'this'指向窗口。所以在下面,輸出記錄的第一次,但不是第二:
// Avoid Plugin.prototype conflicts
$.extend(Plugin.prototype, {
init: function() {
console.log(this.settings.propertyName);
setTimeout(function(){
console.log(this.settings.propertyName);
}, 1000);
}
});
別處this.settings.propertyName設置爲「價值」。 CONSOLE.LOG結果是:
value
Uncaught TypeError: Cannot read property 'propertyName' of undefined
舉例來說,如果我設置window.prop = this.settings.propertyName和執行console.log window.prop代替,這樣的作品,但問題是,有可能運行許多實例與此同時。
我已閱讀了很多與此主題相關的問題,但似乎沒有一個能夠真正解決這種特殊情況。如果有人能夠給我一個清楚的例子,說明如何在使用樣板的jQuery插件或類似的東西的背景下做到這一點,我將不勝感激。請原諒我的noobness,謝謝!