2012-06-09 15 views
6

Przechodzę samouczek JavaScript i jestem w stanie go ukończyć. Ale problem polega na tym, że nie rozumiem, co robi jedna z linii. Mam funkcję setAge(), a następnie po utworzeniu obiektu susan ustawiam jedną z właściwości tego obiektu jako nazwę funkcji? Nie rozumiem, dlaczego tak się dzieje. Czy nie byłbym w stanie użyć funkcji/metody bez robienia tego?Noob Concern: użycie funkcji JavaScript

Kod poradnik:

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work? 

// here, update Susan's age to 35 using the method 
susan.setAge(35); 

Odpowiedz

8

To przypisanie susan „s dla setAge do funkcji określonej powyżej,

function (newAge) { 
    this.age = newAge; 
}; 

która jest funkcją przyjmowania jednego argumentu. Kiedy susan.setAge(35); nazywa, this będzie odnosić się do rozmówcy, susan, aktualizując swój wiek do 35.

zamieszania może być z setAge wykorzystywane są dwukrotnie. Funkcja Susan zostaje zdefiniowana po lewej stronie, prawa strona jest już zdefiniowana. Na przykład:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

działa tak samo. setAge jest również „wielokrotnego użytku”:

harry = new Object(); 
harry.iAmThisOld = setAge; 
harry.iAmThisOld(55); 

Demohttp://jsfiddle.net/7JbKY/2/

-1

to sprawa zakresu i zamknięcia. Aby uzyskać więcej informacji na ten temat, polecam przeczytać ten artykuł: http://nesj.net/blog/2012/03/javascript-scope-and-closure/

+0

To pytanie nie ma nic wspólnego z określeniem zakresu lub zamknięcia. Chodzi o to, że funkcje są obiektami, tak jak wszystko inne w javascript. Jako takie mogą być przekazywane jako parametry, przypisane do zmiennych itp. – jatrim

0

Działa ze względu na zmienne zakresy.

Pierwszy setAge zmienna jest tylko funkcja i można nazwać to lubią: setAge(24) To nie jest tak bardzo inny niż function setAge(age) {this.age = age}

Po zadeklarować zmienną SetAge i ustawić jego zawartość do funkcji, można ustawić inny zmienna do tej zmiennej. To, co robisz w obiekcie, jest właśnie takie. Po napisaniu susan.setAge = setAge; Właściwość setAge obiektu będzie równa poprzedniej zmiennej setAge, która jest funkcją. Możesz więc zadzwonić pod numer susan.setAge().

0

zobaczmy, co odbywa się w Code

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

tutaj funkcja jest zdefiniowana który będzie zmienić zmienną wiek obiekt do określonego podczas wywoływania funkcji.

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge; 

tu jesteśmy ustawienie predefiniowane wartości susan.age który zostanie zmieniony przez funkcję i jesteśmy ustawiając wartość funkcji do zmiennych susan.mynewageis aby Funkcja dostępna następnym razem, w każdym innym przypadku .

susan.mynewageis(35); 

tutaj ustawiamy wartość susan.age na 35, jak określono podczas wywoływania funkcji.

Zamierzałem zamieścić tę odpowiedź, ale przez pomyłkę nacisnąłem przycisk przesyłania i wysłałem niekompletną odpowiedź.

Powiązane problemy