2012-05-31 21 views

Odpowiedz

4

Pierwszy fragment bierze this obiekt, cokolwiek to jest, i przypisuje funkcję do jej gniazda (pole) o nazwie method1.this mogą reprezentować różne przedmioty, w zależności od sposobu test1 nazywa się:

  • po nazwie jako samodzielna funkcja - test1() - this będzie window
  • po nazwie jako konstruktor - new test1() - this dotyczy przedmiot powstaje
  • wywołane poprzez call lub apply - test1.apply(someObject) - this dotyczy argumentu

Drugi fragment zajmuje obiekt test2 i przypisuje mu funkcję do gniazda o nazwie method1.

1

Pierwszym sposobem jest konstruktor, który tworzy więcej obiektów i musi mieć new kluczowe:

var mytest1 = new test1(); 
mytest1.method1(); 

Drugi sposób jest od razu gotowy do użycia:

test2.method1(); 
+4

Należy zauważyć, że 'test1' niekoniecznie jest konstruktorem. Może być używany jako jeden, ale może być również przeznaczony do działania w kontekście istniejącego obiektu. – apsillers

0

Zakładając, że składnia była prawidłowa, pierwszym jest konstruktor, który nadaje wszystkim obiektom test1 utworzonym za pomocą metody new test1() metodę o nazwie method1. Drugi tylko dodaje funkcję do obiektu konstruktora. W javascript, funkcje są obiektami, które mogą mieć właściwości (w tym metody).

0

Pierwsza wersja faktycznie tworzy metodę dostępną dla wszystkich obiektów instancja tak:

var o = new test1(); 
o.test1(); 

Drugi prostu dołączony funkcję jako atrybut na funkcję test2. Jeśli znasz inne języki OO oparte na klasach, działa to trochę jak metoda statyczna. W drugim przykładzie nie będziesz mieć dostępu do wskaźnika this.

0

jako pierwszego:

var test1 = function() { 
    this.method1 = function() {} 

}

definiuje funkcję "test1". Po wywołaniu (i tylko wtedy) "test1", "this.method1" zostanie zdefiniowany jako funkcja, która nic nie robi.

Drugi:

var test2 = function() {}; 
test2.method1 = function() {}; 

utworzyć funkcję „test2” i jednocześnie określa funkcję „test2.method1”, bez konieczności powoływania pierwszą funkcję.

0

Pierwsza ustawia właściwość method1 na cokolwiek wywołuje test1().

Drugi określa pustą funkcję i ustawia właściwość method1 na test2

Powiązane problemy