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

时间:2012-10-04 13:19:10

标签: javascript titanium

  

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

我很困惑,什么时候在javascript中使用self和this 我知道 this 指的是当前上下文,而 self 指的是当前窗口。
当我在Titanium中开发应用程序时。我想知道何时使用 self this 或者确实是钛开发中存在 self 的概念。

这是我在我的钛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 吗? 而不是使用这个我可以创建一个命名空间并执行以下操作:

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

两种方法都有效,但在此使用的用途是什么

2 个答案:

答案 0 :(得分:9)

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();

答案 1 :(得分:3)

你的问题有点混乱,就像问:我买苹果还是西红柿?答案是,这实际上取决于你想做什么,因为它们完全不同。

基本上,你已经在一定程度上回答了你自己的问题,因为你已经知道了两者之间的差异:

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

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

这会回答这个问题吗?

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