znalazłem coś bardzo dziwny dzisiaj: W przypadku tworzenia obiektów o funkcji konstruktora i hasła new
, ale return
zależności od konstruktora, to zachowuje się tak:Używanie „powrót” podczas tworzenia obiektów z „nowych”
- Nowo utworzony "obiekt" jest zamiast tego funkcją.
- Ta nowa funkcja może być wywołana jak normalne, jednak ...
- Jeśli zachować odniesienie do
this
w funkcji konstruktora,this
odniesienia do obiektu, który został prawidłowo utworzony od konstruktora. To jest to, czego oczekiwałeś, że wrócisz znew
.
Oto przykład:
function Constructor() {
var self = this;
this.name = 'instance';
return function() {
return self;
}
}
Więc jeśli instancja to tak: var instance = new Constructor()
Poniższa skutkowałoby:
typeof instance //returns "function"
typeof instance() //returns "object"
instance() //returns { name: 'instance' }
Więc myślę, że mam trzy pytania:
- Czy to jest legalne i czy to działa? k między przeglądarkami? To naprawdę niesamowite i myślę, że można go używać na wiele sposobów, ale czy to zachowanie jest niezawodne?
- Co dzieje się w tle, które powoduje to zachowanie?
- (może być odpowiedzią 2, ale ...) Czy nowy obiekt (ten, do którego odnosi się "to") wewnątrz nowej instancji, tak że jest on samowystarczalny i czy jest prawidłowo czyszczony przez garbage collector?
Błędem jest "zwrócić" wszystko od konstruktora, ostatnio słyszałem. –