2015-10-17 4 views
5

Backbone.js beginnt mit:Was ist das Ziel von self.self == Self-Check in JavaScript?

//Establish the root object, `window` (`self`) in the browser, or `global` on the server. 
//We use `self` instead of `window` for `WebWorker` support. 
var root = (typeof self == 'object' && self.self == self && self) || 
      (typeof global == 'object' && global.global == global && global); 

Was für ist self.self == self? Wann kann es falsch sein?
Gleiches über global.global == global.

+1

Ich denke, dass sie zuerst "self" und dann "self.self" überprüfen sollten. Wenn "self" sonst "null" wäre, würde "self.self" werfen. – Oriol

+1

Die 'Selbst'-Schikane hat wahrscheinlich etwas mit [' window.self'] (https://developer.mozilla.org/en-US/docs/Web/API/Window/self) zu tun, nicht sicher über 'global '. –

Antwort

0

Ich denke here Sie können zumindest einen Teil der Erklärung finden.

1
function Mistake(x); 
    self = this; 
    x.on("event", function() { 
     console.log(self); 
    }); 
} 
new Mistake(…); 

Haben Sie es bemerkt? Jetzt haben wir eine globale self, die nicht die self ist, die das Backbone erwartet. Es wird also überprüft, ob self tatsächlich das globale Objekt ist, was wahrscheinlich der Fall ist, wenn self ein Objekt ist und das Objekt die "globale Variable" self als Eigenschaft besitzt, die auf das Objekt selbst zeigt.

Dasselbe gilt für global.