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?
this
będzie odnosić się do elementu, który wywołał zdarzenie, a nie do obiektu, ale możesz po prostu to zrobićvar instance = this
.