国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

關于this和self的使用說明

2019-11-21 00:19:19
字體:
來源:轉載
供稿:網(wǎng)友
前兩天在寫一個chrome的extensions,因為 content里和background交互必需要一個異步方法實現(xiàn),如:
復制代碼 代碼如下:

var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
});
}
});

這個this應該是Test這個對象,但是回調(diào)方法里是空的。難道要把this做參數(shù)傳過去,再call回來?還好,mootools里有個好方法,bind。
復制代碼 代碼如下:

var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
}.bind(this));
}
});

這下OK了,繼續(xù)寫:
復制代碼 代碼如下:

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也不容易分清哪個this是什么了。而真實的代碼比這個要恐怖的多,有的情況下,我們的確需要this指向其它的變量,而不是這個類。
最常用的解決方法,是這樣:
復制代碼 代碼如下:

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 {}
});

我特別定義了一個_self的變量來代替this,這看起來象什么?python!
現(xiàn)在終于體會到python的self絕對不是多此一舉。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌鲁木齐市| 芜湖县| 册亨县| 梁平县| 宁乡县| 宝兴县| 简阳市| 左贡县| 确山县| 冕宁县| 和静县| 瓦房店市| 拉萨市| 大足县| 巨野县| 涟水县| 舒兰市| 邵东县| 晴隆县| 绥德县| 曲水县| 牙克石市| 冷水江市| 开原市| 富阳市| 抚顺县| 社会| 张家口市| 乌兰县| 顺平县| 西城区| 遵义市| 高青县| 山东| 乃东县| 宁强县| 揭阳市| 舟山市| 安乡县| 宾川县| 澳门|