Разница между self и this в javascript и когда использовать любой из них [дубликат]
Возможные Дубликаты:
что лежит в основе этой идиомы JavaScript: var self = this?
Я смущен, что когда использовать self и это в javascript.
Я знаю это этой относится к текущему контексту и self относится к текущему окну.
Как я разрабатываю приложение в Titanium. Я хочу знать, когда использовать self или этой
Или есть любое понятие 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;
}
оба подхода работают, но какой смысл использовать этой здесь
2 ответов
ваш вопрос несколько запутан, это как спросить: я покупаю яблоки или помидоры? Ответ: это действительно зависит от того, что вы хотите сделать, так как они совершенно разные.
по существу, вы ответили на свой собственный вопрос в некоторой степени, потому что вы уже знаете различия между ними:
-
this
относится к текущему контексту -
self
относится кwindow
function myAPI() {
this.auth = auth;
this.nodeAPI = nodeAPI;
return this;
}
module.exports = myAPI;
вы спрашиваете можете ли вы использовать self
вместо. Подумайте об этом, что делает this
позволяют это сделать? Это позволяет вам ссылаться на контекст. Каков контекст, ну, это module
когда вы называете module.exports()
. И module
скорее всего, не будет window
, Так нет, вы не можете использовать self
здесь.
это ответ на вопрос?
второй пример кода, кажется, делает нечто совершенно другое. Не знаю, что и думать.
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();