11

可能重复:
这个 JavaScript 习语的基础是什么:var self = this?

我很困惑什么时候在javascript中使用self和this。
我知道this指的是当前上下文,而self指的是当前窗口。
当我在 Titanium 中开发应用程序时。我想知道什么时候使用self或者这个OR 是否在钛开发中 有任何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代替吗?而不是使用,我可以创建一个命名空间并执行以下操作:

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

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

4

2 回答 2

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();
于 2012-10-05T10:46:31.333 回答
3

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

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

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

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

这能回答问题吗?

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

于 2012-10-04T14:12:26.127 回答