2012-07-01 18 views
12
var tools = {}; 

tools.triangle = function() { 
    var originX = 0; 
    var originY = 0; 
} 

 Różnica między var a tym w funkcjach JavaScript?

var tools = {}; 

tools.triangle = function() { 
    this.originX = 0; 
    this.originY = 0; 
} 

Czy są jakieś różnice między tymi dwoma blokami kodu? Przepraszam, jeśli wcześniej zostało to zadane.

+1

Zmienna 'var' jest prywatna. zmienna 'this' jest publiczna. – elclanrs

+1

@ elclanrs - ten komentarz nie jest pomocny, ponieważ wprowadza w błąd. Zmienne mogą być zadeklarowane jako globalne, 'this' jest związane z kontekstem wykonania, nie jest zmienną w zwykłym znaczeniu, chociaż może być traktowane jako zmienna lokalna. – RobG

Odpowiedz

11

var tworzy lokalną zmienną w ramach tools.triangle. Zmienne originX i originY nie mogą wchodzić w interakcje z zewnętrznym numerem tools.triangle. this to wskaźnik do bieżącego obiektu, z którym masz do czynienia. Drugi przykład może być użyty do nadania właściwości obiektowi poprzez wykonanie new tools.triangle();. Jeśli nie użyjesz new i po prostu użyjesz tools.triangle();, this wskaże obiekt globalny, który jest obiektem window. Można zmienić obiekt, do którego this punktów przy użyciu metody funkcyjne call(); i apply(); takiego:

var myObj = {}; 

tools.triangle.call(myObj); 

// "this" in tools.triangle now points to myObj 
// myObj now has the properties originX and originY 

Ważne jest, aby wiedzieć, że this może odwołać się do dowolnego obiektu, a także być niezdefiniowana lub null w ES5 trybie ścisłym .

Możesz znaleźć więcej informacji here.

+0

OK dzięki za odpowiedź. –

+0

'this' potrzebuje więcej wyjaśnień niż podano, jest ustawione przez wywołanie i może odwoływać się do ** dowolnego ** obiektu, a także być niezdefiniowane lub' null' w trybie ścisłym ES5. – RobG

+0

@ 0x499602D2 Dziękuję za odpowiedź. Naprawdę tego szukałem. Nie wiedziałem też, że metoda "call" (i "apply") może zmienić zakres. – GuyT

0

W pierwszym przykładzie X i Y istnieją jako zmienne lokalne dla zamknięcia zapisanego w zmiennej triangle.

W drugim przykładzie X i Y istnieją jako zmienne dla obiektu tools.triangle z powodu użycia this.

Powiązane problemy