關(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è)類。
最常用的解決方法,是這樣:
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)文章
JS彈出層遮罩,隱藏背景頁(yè)面滾動(dòng)條細(xì)節(jié)優(yōu)化分析
下面小編就為大家?guī)?lái)一篇JS彈出層遮罩,隱藏背景頁(yè)面滾動(dòng)條細(xì)節(jié)優(yōu)化分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04
JS動(dòng)態(tài)修改表格cellPadding和cellSpacing的方法
這篇文章主要介紹了JS動(dòng)態(tài)修改表格cellPadding和cellSpacing的方法,涉及javascript操作cellPadding和cellSpacing屬性的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
JS實(shí)現(xiàn)仿Windows7風(fēng)格的網(wǎng)頁(yè)右鍵菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)仿Windows7風(fēng)格的網(wǎng)頁(yè)右鍵菜單效果代碼,涉及JavaScript鼠標(biāo)右鍵響應(yīng)及動(dòng)態(tài)生成頁(yè)面菜單的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
微信小程序bindinput與bindsubmit的區(qū)別實(shí)例分析
這篇文章主要介紹了微信小程序bindinput與bindsubmit的區(qū)別,結(jié)合實(shí)例形式分析了微信小程序bindinput與bindsubmit的具體功能、用法及相關(guān)使用區(qū)別,需要的朋友可以參考下2019-04-04
Webpack 4如何動(dòng)態(tài)切割JS注入文件名詳解
這篇文章主要給大家介紹了關(guān)于Webpack 4如何動(dòng)態(tài)切割JS注入文件名的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Webpack4具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
淺析ThreeJs中如何實(shí)現(xiàn)動(dòng)畫(huà)效果
在 ThreeJs 中,動(dòng)畫(huà)是創(chuàng)建動(dòng)態(tài) 3D 場(chǎng)景的重要組成部分,本文將介紹如何使用 ThreeJs 實(shí)現(xiàn)基礎(chǔ)的動(dòng)畫(huà)效果,需要的小伙伴可以參考一下2024-10-10
top.location.href 沒(méi)有權(quán)限 解決方法
以前好像沒(méi)有遇到這問(wèn)題,也可能是沒(méi)有在意吧,我的blog內(nèi)容頁(yè)都是有判斷的,規(guī)則是,如果top.location不是內(nèi)容頁(yè)的話就跳到內(nèi)容頁(yè)2008-08-08
JS/HTML5游戲常用算法之路徑搜索算法 隨機(jī)迷宮算法詳解【普里姆算法】
這篇文章主要介紹了JS/HTML5游戲常用算法之路徑搜索算法 隨機(jī)迷宮算法,結(jié)合實(shí)例形式詳細(xì)分析了針對(duì)迷宮游戲路徑搜索算法的普里姆算法相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
js實(shí)現(xiàn)的定時(shí)關(guān)閉頁(yè)面或定時(shí)提醒效果代碼
比較有創(chuàng)意的定時(shí)關(guān)閉頁(yè)面或定時(shí)提醒效果代碼2008-02-02

