Czy jest jakaś różnica między tymi dwoma:Jaka jest różnica między tymi dwoma?
var test1 = function() {
this.method1 = function() {}
}
i
var test2 = function() {};
test2.method1 = function() {};
Czy jest jakaś różnica między tymi dwoma:Jaka jest różnica między tymi dwoma?
var test1 = function() {
this.method1 = function() {}
}
i
var test2 = function() {};
test2.method1 = function() {};
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ę:
test1()
- this
będzie window
new test1()
- this
dotyczy przedmiot powstajecall
lub apply
- test1.apply(someObject)
- this
dotyczy argumentuDrugi fragment zajmuje obiekt test2
i przypisuje mu funkcję do gniazda o nazwie method1
.
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();
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
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).
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
.
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ę.
Pierwsza ustawia właściwość method1 na cokolwiek wywołuje test1().
Drugi określa pustą funkcję i ustawia właściwość method1 na test2
Tak. Błąd składniowy: 'var test2 = function();' – diolemo
@diolemo Naprawiłem błąd składni. – Triptych