關(guān)于this和self的使用說(shuō)明
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
});
}
});
這個(gè)this應(yīng)該是Test這個(gè)對(duì)象,但是回調(diào)方法里是空的。難道要把this做參數(shù)傳過(guò)去,再call回來(lái)?還好,mootools里有個(gè)好方法,bind。
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
}.bind(this));
}
});
這下OK了,繼續(xù)寫(xiě):
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
$each(this.options, function(o, i) {
if (o == '1') {
this.fun1();
} else {
this.fun2();
}
}.bind(this));
}.bind(this));
},
fun1: function {},
fun2: function {}
});
就算有bind也不容易分清哪個(gè)this是什么了。而真實(shí)的代碼比這個(gè)要恐怖的多,有的情況下,我們的確需要this指向其它的變量,而不是這個(gè)類(lèi)。
最常用的解決方法,是這樣:
var Test = new Class({
options: {},
initialize: function(args) {
var _self = this;
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
_self.options = options;
$each(_self.options, function(o, i) {
if (o == '1') {
_self.fun1();
} else {
_self.fun2();
}
});
});
},
fun1: function {},
fun2: function {}
});
我特別定義了一個(gè)_self的變量來(lái)代替this,這看起來(lái)象什么?python!
現(xiàn)在終于體會(huì)到python的self絕對(duì)不是多此一舉。
相關(guān)文章
Aptos?SDK交互實(shí)現(xiàn)過(guò)程詳解
這篇文章主要為大家介紹了Aptos?SDK交互實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03JavaScript async&await方法中的異常處理方案
在 async/await 方法中,可以使用 try-catch 塊來(lái)處理異常,通過(guò)使用 try-catch,可以捕獲異步操作中拋出的異常,并在 catch 塊中進(jìn)行適當(dāng)?shù)奶幚?本文給大家詳細(xì)介紹了async&await方法中異常如何處理,需要的朋友可以參考下2023-08-08利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫(huà)效果
這篇文章主要介紹了利用JavaScript在網(wǎng)頁(yè)實(shí)現(xiàn)八數(shù)碼啟發(fā)式A*算法動(dòng)畫(huà)效果,需要的朋友可以參考下2017-04-04追蹤discord.js中刪除消息的用戶(hù)方法實(shí)例詳解
這篇文章主要為大家介紹了如何追蹤discord.js中刪除消息的用戶(hù)方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01js電信網(wǎng)通雙線(xiàn)自動(dòng)選擇技巧
網(wǎng)站打開(kāi)的速度快是相當(dāng)重要的baidu.com不管你是用的什么網(wǎng)絡(luò),都打開(kāi)的很快2008-11-11JavaScript邏輯運(yùn)算符相關(guān)總結(jié)
這篇文章主要介紹了JavaScript邏輯運(yùn)算符的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2020-09-09uniapp自定義驗(yàn)證碼輸入框并隱藏光標(biāo)
這篇文章主要介紹了uniapp自定義驗(yàn)證碼輸入框隱藏光標(biāo),效果是點(diǎn)擊輸入框喚起鍵盤(pán),藍(lán)框就相當(dāng)于input的光標(biāo),驗(yàn)證碼輸入錯(cuò)誤或者不符合格式要求會(huì)將字體以及邊框改成紅色提示持續(xù)1s然后清空數(shù)據(jù),恢復(fù)原邊框樣式,需要的朋友可以參考下2023-02-02Script標(biāo)簽與訪(fǎng)問(wèn)HTML頁(yè)面詳解
本篇文章主要是對(duì)Script標(biāo)簽與訪(fǎng)問(wèn)HTML頁(yè)面進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01