可能重复:
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;
}
两种方法都有效,但在此使用此的用途是什么
答案 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
。
这会回答这个问题吗?
第二个代码示例似乎做了一些完全不同的事情。我不知道该怎么做。