最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于this和self的使用说明_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 20:54:29
文档

关于this和self的使用说明_javascript技巧

关于this和self的使用说明_javascript技巧:前两天在写一个chrome的extensions,因为 content里和background交互必需要一个异步方法实现,如: 代码如下: var Test = new Class({ options: {}, initialize: function(args) { chrome.extension.sendReques
推荐度:
导读关于this和self的使用说明_javascript技巧:前两天在写一个chrome的extensions,因为 content里和background交互必需要一个异步方法实现,如: 代码如下: var Test = new Class({ options: {}, initialize: function(args) { chrome.extension.sendReques

前两天在写一个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,这看起来象什么?python!
现在终于体会到python的self绝对不是多此一举。

文档

关于this和self的使用说明_javascript技巧

关于this和self的使用说明_javascript技巧:前两天在写一个chrome的extensions,因为 content里和background交互必需要一个异步方法实现,如: 代码如下: var Test = new Class({ options: {}, initialize: function(args) { chrome.extension.sendReques
推荐度:
标签: js javascript this
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top