返回首页 | 注册送体验金88送现金

合作共赢、快速高效、优质的网站建设提供商

更多精品源码-尽在织梦模板-www.moke8.com

网站开发关于this和self的运用说明压服

时间:2017-09-28 编辑:admin

前两天在写一个chrome的extensions,因为 content里和background交互必需求一个异步挑选完结施行,如:
代码如下:
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
});
}
});

这个this应该是Test这个目标,可是回调挑选里是空的。莫非要把this做参数传过去,再call回来?还好,mootools里有个好挑选,bind。
代码如下:
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
……
}.bind(this));
}
});

这下OK了,持续写:
代码如下:
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,这看起来象什么?!
现在总算领会到的self肯定不是多此一举。
浏览:

网站建设

流程

    网站建设流程