2015-10-17 15 views
5

backbone.js inizia con:Qual è l'obiettivo di self.self == auto 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); 

Qual è self.self == self per? Quando può essere falso?
Stessa cosa per global.global == global.

+1

Penso che prima dovrebbero controllare 'self' e quindi controllare' self.self'. Altrimenti, se 'self' fosse' null', getterebbe 'self.self'. – Oriol

+1

Il chicanery 'self' probabilmente ha qualcosa a che fare con [' window.self'] (https://developer.mozilla.org/en-US/docs/Web/API/Window/self), non sicuro di 'global '. –

risposta

0

Penso che here è possibile trovare almeno parte della spiegazione.

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

Hai notato? Ora abbiamo un globale self che non è lo self che la spina dorsale si aspetta. Quindi controlla se self è effettivamente l'oggetto globale, che è probabile che sia il caso in cui self è un oggetto e l'oggetto ha la "variabile globale" self come una proprietà che punta all'oggetto stesso.

Uguale a global.