Разница между 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();