2012-04-15 3 views
1

Werden die nativen JavaScript-Konstruktoren/Funktionen wie Function, Object, Array immer in jedem Bereich verfügbar sein? Werden sie vom globalen Objekt oder etwas auf der gleichen Ebene oder sogar höher geerbt?Sind native JavaScript-Funktionen etwas "superglobales" -ähnliches?

Als Beispiel enthält MooTools die folgende Zeile in seiner Selbst ausgeführte Funktion:

var Function = this.Function; 

Ich fragte mich also, gibt es eine Situation, in der diese einheimischen Konstrukteuren nicht mehr zur Verfügung? Vielleicht auf Serverseite oder striktem JS? Oder ist es nur eine Frage der Performance, eine lokale Referenz zu cachen? Aber wenn ja, warum nicht auf diese Weise:

var Function = Function; 
+0

Die nativen Konstruktoren sind globale Objekte (Eigenschaften des globalen Objekts), also ja, sie sind immer verfügbar. –

+1

@ ŠimeVidas, das ist nicht ewig wahr. Ich kann sie leicht überschreiben, z. 'Funktion = 6;' Es gibt knifflige Wege, um darauf zu verweisen, aber die globalen Referenzen können auf diese Weise verloren gehen. – davin

Antwort

1

Sie haben den gleichen Namen, also können Sie das nicht tun.

(function() { 
    var Function = Function; 

    return Function; 
})(); // undefined 

Warum ist es in erster Linie gemacht? Angeblich soll man sich vor Benutzerfehlern oder Neudefinitionen schützen, und um die Menge der Umfangskette zu reduzieren, muss die Engine nach etwas suchen. Relevante Blog-Post: http://blog.minite.ch/?p=47

Natürlich Function ist nicht schreibgeschützt, so dass selbst wenn jemand Function im globalen Namensraum neu zu definieren hat, die nicht helfen würden. Jeder, der tut dies verdient es, obwohl =)


EDIT: Wenn sie tatsächlich gegen Benutzerfehler schützen wollten, ein narrensicherer Weg wäre:

var Function = (function() {}).constructor; 

Aber es ist sinnlos, wie oben erwähnt .

+0

Oh danke, schön zu wissen! :) – headacheCoder

+0

Minitech, hast du eine Verbindung dafür? – loveNoHate

+0

@dollarvar: Ah, tut mir leid, dass ich es gebrochen habe. http://web.archive.org/web/20120617142826/http://blog.minite.ch/?p=47 – Ryan

Verwandte Themen