Mój kolega używa „nowej funkcji ()” z małą literą „f” do definiowania nowych obiektów w JavaScript. Wydaje się, że działa dobrze we wszystkich głównych przeglądarkach, a także wydaje się być dość skuteczny w ukrywaniu zmiennych prywatnych. Oto przykład:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Jak tylko "this" zostanie użyte, staje się publiczną własnością jakiegoś obiektuObj. Więc someObj.foo, someObj.get_inner () i someObj.set_inner () są dostępne publicznie. Dodatkowo set_inner () i get_inner () są metodami uprzywilejowanymi, więc mają dostęp do "inner" poprzez domknięcia.
Jednak nigdzie nie widziałem żadnego odniesienia do tej techniki. Nawet JSLint Douglasa Crockforda narzeka na to:
- dziwna konstrukcja. Usuń „nowy”
Używamy tej techniki w produkcji i wydaje się, że działa dobrze, ale trochę mnie to niepokoi, ponieważ nie jest nigdzie udokumentowane. Czy ktoś wie, czy to poprawna technika?
thisbędzie odnosić się do elementu, który wywołał zdarzenie, a nie do obiektu, ale możesz po prostu to zrobićvar instance = this.