Mój kolega użył "nowej funkcji()" z małą literą "f" do zdefiniowania nowych obiektów w JavaScript. Wydaje się, że działa dobrze we wszystkich głównych przeglądarkach i wydaje się również dość skuteczny w ukrywaniu zmiennych prywatnych. Oto przykład:`nowa funkcja()` z małą literą "f" w JavaScript
var someObj = new function() {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function() {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Gdy tylko użyto "this", staje się ona własnością publiczną someObj. Więc niektóreObj.foo, someObj.get_inner() i someObj.set_inner() są dostępne publicznie. Ponadto, set_inner() i get_inner() są uprzywilejowanymi metodami, dzięki czemu mają dostęp do "wewnętrznych" poprzez zamknięcia.
Jednak nie widziałem żadnego odniesienia do tej techniki w dowolnym miejscu. Nawet Douglasa Crockforda za JSLint narzeka na niego:
- dziwną konstrukcję. Usuń „nowe”
Używamy tej techniki w produkcji i wydaje się działać dobrze, ale jestem nieco zaniepokojeni, bo to nie jest udokumentowane w dowolnym miejscu. Czy ktoś wie, czy jest to ważna technika?
Preferuję twój konstrukt nad IIFE ("Natychmiastowa funkcja"). 1: Nie potrzebujesz wyraźnego obiektu "instancja", to jest dokładnie to, co "to" w JavaScript. 2: Nie musisz niczego zwracać, co oznacza, że nie musisz o tym pamiętać. Nawet autor zaakceptowanej odpowiedzi zapomniał najpierw zwrócić obiekt instancji! Ludzie zwykle wolą używać IIFE, jeśli nienawidzą nowych i to z nie bez powodu - jeśli masz funkcję obsługującą wydarzenie DOM, "this" będzie odnosić się do elementu, który wystrzelił zdarzenie, a nie twojego obiektu, ale możesz po prostu mieć Zamiast tego należy użyć instancji var. –
Dlaczego ważne jest, aby pytanie określało "małe litery f"? – ClearCloud8
Ponieważ w Javascript istnieje również funkcja "Funkcja" (z dużą literą F), która jest inna: __Function__ to funkcja konstruktora, która może tworzyć nowe obiekty funkcji, podczas gdy __funkcja__ jest słowem kluczowym. –