可能的重复项:
这个JavaScript成语的基础是什么:var self = this?
我很困惑何时在javascript中使用self和this。
我知道这是指当前上下文,而自我是指当前窗口。
因为我正在开发钛应用程序。我想知道什么时候使用self或这个或者确实在钛开发中有任何自我的概念。
这是我在我的 titanium 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;
}
这两种方法都有效,但是在这里使用它有什么用
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();
你的问题有点令人困惑,就像问:我买苹果还是西红柿?答案是,这实际上取决于你想做什么,因为它们是完全不同的。
从本质上讲,您在某种程度上已经回答了自己的问题,因为您已经知道两者之间的区别:
-
this
是指当前上下文 -
self
指的是window
function myAPI() {
this.auth = auth;
this.nodeAPI = nodeAPI;
return this;
}
module.exports = myAPI;
您是在询问是否可以改用self
。想一想,this
允许你做什么?它允许您引用上下文。上下文是什么,好吧,当你打电话给module.exports()
时,它module
.而且module
很可能不会window
,所以不,你不能在这里使用self
。
这回答了这个问题吗?
第二个代码示例似乎做了一些完全不同的事情。我不知道该怎么做。