最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于this和self的使用說明

 更新時(shí)間:2010年08月01日 17:41:12   作者:  
剛接觸python的時(shí)候,最不習(xí)慣的事情,就是每個(gè)方法都要加一個(gè)self。無論Javascript還是C#,都直接一個(gè)this搞定,干嘛非要加一個(gè)變量self。
前兩天在寫一個(gè)chrome的extensions,因?yàn)?content里和background交互必需要一個(gè)異步方法實(shí)現(xiàn),如:
復(fù)制代碼 代碼如下:

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ù)傳過去,再call回來?還好,mootools里有個(gè)好方法,bind。
復(fù)制代碼 代碼如下:

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

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

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è)類。
最常用的解決方法,是這樣:
復(fù)制代碼 代碼如下:

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的變量來代替this,這看起來象什么?python!
現(xiàn)在終于體會(huì)到python的self絕對(duì)不是多此一舉。

相關(guān)文章

最新評(píng)論

巴彦县| 高安市| 平和县| 千阳县| 丹阳市| 靖西县| 钟祥市| 顺昌县| 晋中市| 沿河| 财经| 揭阳市| 武城县| 兴安盟| 吴忠市| 五莲县| 江山市| 宝清县| 迁西县| 全州县| 高淳县| 华池县| 黔江区| 江山市| 左贡县| 威海市| 玛多县| 衡阳市| 额尔古纳市| 乐清市| 榆中县| 和平县| 澳门| 宾阳县| 报价| 信宜市| 剑川县| 弋阳县| 金沙县| 乐都县| 禄劝|