关于this和self的使用说明

 更新时间:2010年08月01日 17:41:12   作者:  
刚接触python的时候,最不习惯的事情,就是每个方法都要加一个self。无论Javascript还是C#,都直接一个this搞定,干嘛非要加一个变量self。
前两天在写一个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绝对不是多此一举。

相关文章

  • Aptos SDK交互实现过程详解

    Aptos SDK交互实现过程详解

    这篇文章主要为大家介绍了Aptos SDK交互实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • JS实现时间选择器

    JS实现时间选择器

    这篇文章主要为大家详细介绍了JS实现时间选择器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JavaScript async&await方法中的异常处理方案

    JavaScript async&await方法中的异常处理方案

    在 async/await 方法中,可以使用 try-catch 块来处理异常,通过使用 try-catch,可以捕获异步操作中抛出的异常,并在 catch 块中进行适当的处理,本文给大家详细介绍了async&await方法中异常如何处理,需要的朋友可以参考下
    2023-08-08
  • 利用JavaScript在网页实现八数码启发式A*算法动画效果

    利用JavaScript在网页实现八数码启发式A*算法动画效果

    这篇文章主要介绍了利用JavaScript在网页实现八数码启发式A*算法动画效果,需要的朋友可以参考下
    2017-04-04
  • 追踪discord.js中删除消息的用户方法实例详解

    追踪discord.js中删除消息的用户方法实例详解

    这篇文章主要为大家介绍了如何追踪discord.js中删除消息的用户方法实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • js电信网通双线自动选择技巧

    js电信网通双线自动选择技巧

    网站打开的速度快是相当重要的baidu.com不管你是用的什么网络,都打开的很快
    2008-11-11
  • JavaScript逻辑运算符相关总结

    JavaScript逻辑运算符相关总结

    这篇文章主要介绍了JavaScript逻辑运算符的相关资料,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-09-09
  • uniapp自定义验证码输入框并隐藏光标

    uniapp自定义验证码输入框并隐藏光标

    这篇文章主要介绍了uniapp自定义验证码输入框隐藏光标,效果是点击输入框唤起键盘,蓝框就相当于input的光标,验证码输入错误或者不符合格式要求会将字体以及边框改成红色提示持续1s然后清空数据,恢复原边框样式,需要的朋友可以参考下
    2023-02-02
  • JavaScript如何生成二维数组

    JavaScript如何生成二维数组

    这篇文章主要介绍了JavaScript如何生成二维数组问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Script标签与访问HTML页面详解

    Script标签与访问HTML页面详解

    本篇文章主要是对Script标签与访问HTML页面进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01

最新评论