源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于this和self的使用说明

  • 时间:2020-04-24 08:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于this和self的使用说明
前两天在写一个chrome的extensions,因为 content里和background交互必需要一个异步方法实现,如:
[u]复制代码[/u] 代码如下:
var Test = new Class({ options: {}, initialize: function(args) { chrome.extension.sendRequest({ 'type':'options' }, function(options) { this.options = options; …… }); } });
这个this应该是Test这个对象,但是回调方法里是空的。难道要把this做参数传过去,再call回来?还好,mootools里有个好方法,bind。
[u]复制代码[/u] 代码如下:
var Test = new Class({ options: {}, initialize: function(args) { chrome.extension.sendRequest({ 'type':'options' }, function(options) { this.options = options; …… }.bind(this)); } });
这下OK了,继续写:
[u]复制代码[/u] 代码如下:
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指向其它的变量,而不是这个类。 最常用的解决方法,是这样:
[u]复制代码[/u] 代码如下:
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绝对不是多此一举。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部