javascript中self和this之间的区别以及何时使用它们中的任何一个[重复]

Posted

技术标签:

【中文标题】javascript中self和this之间的区别以及何时使用它们中的任何一个[重复]【英文标题】:Difference between self and this in javascript and when to use either of them [duplicate] 【发布时间】:2012-09-25 13:03:58 【问题描述】:

可能重复:What underlies this javascript idiom: var self = this?

我很困惑何时在 javascript 中使用 self 和 this。 我知道 this 指的是当前上下文,而 self 指的是当前窗口。 当我在 Titanium 中开发应用程序时。我想知道何时使用 selfthis 或者在钛发展中是否有任何自我的概念。

这是我在我的钛 commonJS 模块中做的示例代码

var auth = require('/SDKTest/auth');
var nodeAPI = require('/SDKTest/nodeAPI');
function myAPI() 
     this.auth = auth;
     this.nodeAPI = nodeAPI;
     return this;
    
module.exports = myAPI;

此代码有效,但我可以使用 self 代替 this 吗? 而不是使用 this 我可以创建一个命名空间并执行以下操作:

  function myAPI() 
     var api = ;
     api.auth = auth;
     api.nodeAPI = nodeAPI;
     return api;
    

这两种方法都有效,但是在这里使用 this 有什么用处

【问题讨论】:

参考***.com/questions/337878/js-var-self-this 我已经更新了我的问题,在那里添加了一个示例代码 【参考方案1】:

self 不是 JavaScript 关键字!程序员在定义类时使用它来始终有效地引用对象本身。

var Person = function() 
    var self = this;
    // private function
    function say(what) 
        alert(what);
    
    self.fetchSomething = function() 
        var xhr = Ti.Network.createHTTPClient(
            onload: function() 
                // in this case 'this' is referencing to xhr!!!
                say(this.responseText);
            
        );
        xhr.open('GET', 'http://www.whatever.com');
        xhr.send();
    
    return self;

var p = new Person();
p.fetchSomething();

【讨论】:

【参考方案2】:

你的问题有点令人困惑,就像在问:我买苹果还是西红柿?答案是,这真的取决于你想做什么,因为它们完全不同。

本质上,您已经在一定程度上回答了自己的问题,因为您已经知道两者之间的区别:

this 指当前上下文 self 指的是window
function myAPI() 
     this.auth = auth;
     this.nodeAPI = nodeAPI;
     return this;
    
module.exports = myAPI;

您是在询问是否可以改用self。想想看,this 允许你做什么?它允许您参考上下文。上下文是什么,嗯,当你调用module.exports() 时,它是module。而module 很可能不会是window,所以不,你不能在这里使用self

这能回答问题吗?

第二个代码示例似乎做了一些完全不同的事情。我不知道该怎么做。

【讨论】:

@phantOm 在第二个代码中,我只是创建自己的自定义命名空间,其中包含 auth 和 nodeAPI 对象 @AjeetPratapMaurya 是的,我明白了。问题是,它完全不同。如果您要将那个分配给module.exports,它将返回module.exports() 一个具有authnodeAPI 属性的new 对象,而不是修改module 本身,作为第一个代码是的。

以上是关于javascript中self和this之间的区别以及何时使用它们中的任何一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php 中self,this的区别和实地操作

JavaScript 和 ActionScript 中的“this”之间的区别

JSON和javascript对象之间的区别[重复]

PHP 类或 PHP 方法中 self 和 $this-> 的区别在哪里?

Javascript:语句和表达式之间的区别?

$(this) 和 event.target 之间的区别?