Potrzebuję różnych konstruktorów dla moich instancji. Jaki jest wspólny wzorzec?
javascript
design-patterns
oop
codeholic
źródło
źródło
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. : . Dodatkową= {}
rzeczą, którą tam umieściłem, jest kolejna sztuczka, której nauczyłem się ostatnio, na wypadek, gdybyś chciał mieć możliwość przekazania przez użytkownika żadnego obiektu i używania wszystkich wartości domyślnych.return new this();
,return new this.otherStaticFactoryFunction();
, itd.)!Odpowiedzi:
JavaScript nie ma przeciążania funkcji, w tym dla metod lub konstruktorów.
Jeśli chcesz, aby funkcja zachowywała się inaczej w zależności od liczby i typów parametrów, które do niej przekazujesz, musisz ją ręcznie wąchać. JavaScript szczęśliwie wywoła funkcję z większą lub mniejszą niż zadeklarowaną liczbą argumentów.
Możesz również uzyskać dostęp
arguments
jako tablicę, aby uzyskać dalsze przekazane argumenty.Jeśli potrzebujesz bardziej złożonych argumentów, dobrym pomysłem może być umieszczenie niektórych lub wszystkich z nich w wyszukiwaniu obiektów:
Python demonstruje, jak domyślne i nazwane argumenty mogą być używane do opisywania większości przypadków użycia w bardziej praktyczny i wdzięczny sposób niż przeciążanie funkcji. JavaScript, nie tak bardzo.
źródło
MyObj({foo: "foo"})
plusMyObj({bar: "bar"})
. MyObj ma dwa konstruktory - ale oba przyjmują jeden argument, którym jest ciąg znaków :-)Jak to znajdujesz?
źródło
możesz używać class ze statycznymi metodami, które zwracają instancję tej klasy
za pomocą tego wzorca możesz stworzyć konstruktor multi
źródło
Nie miałem ochoty robić tego ręcznie, jak w odpowiedzi bobince, więc po prostu całkowicie oderwałem wzorzec opcji wtyczki jQuery.
Oto konstruktor:
Oto różne sposoby tworzenia instancji:
A oto, co to spowodowało:
źródło
Idąc dalej z odpowiedzią eruciform, możesz
new
połączyć swoje wywołanie ze swojąinit
metodą.źródło
new Foo()
połączyć i wywołaćinit
razem, ponieważ nie byłem w stanie uzyskać dostępu do właściwości obiektów. Musiałem biecvar a = new Foo(); a.init_1('constructor 1');
Czasami domyślne wartości parametrów wystarczą dla wielu konstruktorów. A kiedy to nie wystarczy, próbuję zawinąć większość funkcji konstruktora w funkcję init (inne parametry), która jest wywoływana później. Rozważ również użycie koncepcji fabryki, aby utworzyć obiekt, który może skutecznie tworzyć inne pożądane obiekty.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
źródło
Możesz użyć Destrukturyzacja obiektów jako parametrów konstruktora w ES6
Oto wzór:
Nie możesz mieć wielu konstruktorów, ale możesz użyć destrukturyzacji i wartości domyślnych, aby robić to, co chcesz.
Możesz to zrobić, jeśli chcesz obsługiwać konstruktor „bez parametrów”.
źródło
Zastosowania:
źródło
To jest przykład podany dla wielu konstruktorów w Programowaniu w HTML5 z JavaScript i CSS3 - nr ref . Egzaminu .
źródło