2012-10-04 5 views
9

Mögliche Duplizieren:
What underlies this JavaScript idiom: var self = this?Unterschied zwischen Selbst und diese in JavaScript und wenn einer von ihnen verwenden

Ich bin verwirrt, dass, wenn selbst und dies in Javascript zu verwenden.
Ich weiß, dass dieser bezieht sich auf den aktuellen Kontext und Selbst bezieht sich auf das aktuelle Fenster.
Wie ich eine Anwendung in Titan entwickeln. Ich möchte wissen, wann Selbst oder dieses zu verwenden ODER gibt es ein Konzept von Selbst in Titan-Entwicklung.

hier ist der Beispielcode, der ich in meinem Titan Commonjs Modul tue

var auth = require('/SDKTest/auth'); 
var nodeAPI = require('/SDKTest/nodeAPI'); 
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

Dieser Code funktioniert, aber kann ich Selbst anstelle von diese? Und statt diese verwenden kann ich einen Namespace erstellen und so etwas tun:

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

beide Ansätze funktionieren, aber was nützt diese hier

+0

Siehe http://stackoverflow.com/questions/337878/js-var-self-this –

+0

i meine Frage aktualisiert haben einen Beispielcode dort –

Antwort

3

Ihre Frage etwas zu verwenden ist verwirrend, es ist wie fragen: kaufe ich Äpfel oder Tomaten? Die Antwort ist, dass es wirklich darauf ankommt, was du machen willst, da sie komplett verschieden sind.

Im Wesentlichen haben Sie Ihre eigene Frage zu einem gewissen Grad beantwortet, da Sie bereits die Unterschiede zwischen den beiden wissen:

  • this an den aktuellen Kontext bezieht sich
  • self
zu window verweist
function myAPI() { 
    this.auth = auth; 
    this.nodeAPI = nodeAPI; 
    return this; 
    } 
module.exports = myAPI; 

Sie fragen, ob Sie c eine Verwendung self stattdessen. Denken Sie darüber nach, was ermöglicht Ihnen this? Es ermöglicht Ihnen, auf den Kontext zu verweisen. Was ist der Kontext, nun, es ist module, wenn Sie module.exports() anrufen. Und module wird höchstwahrscheinlich nicht window sein, also nein, Sie können self hier nicht verwenden.

Beantwortet das die Frage?

Das zweite Codebeispiel scheint etwas völlig anderes zu tun. Ich weiß nicht, was ich davon halten soll.

+0

@phantOm Im zweiten Code hinzugefügt ich meine gerade bin die Schaffung eigener benutzerdefinierter Namespace, der die auth- und nodeAPI-Objekte enthält –

+0

@AjeetPratapMaurya ja, das sehe ich. Die Sache ist, dass es komplett anders ist. Wenn Sie das Modul "module.exports" zuweisen würden, würde es 'module.exports()' ein * neues * Objekt mit den Attributen 'auth' und' nodeAPI' zurückgeben, anstatt 'module' selbst als erstes zu modifizieren Code tut es. – phant0m

8

self ist kein JavaScript-Schlüsselwort! Programmierer verwenden das, wenn sie Klassen definieren, um immer einen gültigen Verweis auf das Objekt selbst zu haben.

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(); 
Verwandte Themen