Saya memerlukan konstruktor yang berbeda untuk instance saya. Apa pola umum untuk itu?
javascript
design-patterns
oop
codeholic
sumber
sumber
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. Ekstra yang= {}
saya masukkan di sana adalah trik lain yang saya pelajari baru-baru ini, jika Anda ingin kemungkinan pengguna tidak melewatkan objek sama sekali dan menggunakan semua default.return new this();
,return new this.otherStaticFactoryFunction();
, dll)!Jawaban:
JavaScript tidak memiliki kelebihan beban, termasuk untuk metode atau konstruktor.
Jika Anda ingin suatu fungsi berperilaku berbeda bergantung pada jumlah dan jenis parameter yang Anda berikan, Anda harus mengendusnya secara manual. JavaScript akan dengan senang hati memanggil fungsi dengan lebih banyak atau lebih sedikit dari jumlah argumen yang dideklarasikan.
Anda juga dapat mengakses
arguments
sebagai array-like untuk mendapatkan argumen lebih lanjut yang diteruskan.Jika Anda membutuhkan argumen yang lebih kompleks, ada baiknya untuk meletakkan beberapa atau semuanya di dalam pencarian objek:
Python mendemonstrasikan bagaimana argumen default dan bernama dapat digunakan untuk mencakup sebagian besar kasus penggunaan dengan cara yang lebih praktis dan anggun daripada overloading fungsi. JavaScript, tidak terlalu banyak.
sumber
MyObj({foo: "foo"})
plusMyObj({bar: "bar"})
. MyObj memiliki dua konstruktor - tetapi keduanya mengambil satu argumen, yaitu string :-)Bagaimana Anda menemukan yang ini?
sumber
Anda bisa menggunakan kelas dengan metode statis yang mengembalikan instance kelas itu
dengan pola ini Anda dapat membuat multi konstruktor
sumber
Tidak merasa ingin melakukannya dengan tangan seperti pada jawaban bobince, jadi saya baru saja merobek pola opsi plugin jQuery.
Inilah konstruktornya:
Berikut cara berbeda dalam pembuatan contoh:
Dan inilah yang membuatnya:
sumber
Lebih jauh dengan jawaban eruciform, Anda dapat
new
menghubungkan panggilan Anda ke dalaminit
metode Anda .sumber
new Foo()
menghubungkan dan melakukan panggilaninit
bersama karena saya tidak dapat mengakses properti pada objek. Saya harus larivar a = new Foo(); a.init_1('constructor 1');
Terkadang, nilai default untuk parameter cukup untuk banyak konstruktor. Dan ketika itu tidak mencukupi, saya mencoba untuk membungkus sebagian besar fungsionalitas konstruktor menjadi fungsi init (other-params) yang dipanggil setelahnya. Pertimbangkan juga untuk menggunakan konsep pabrik untuk membuat sebuah objek yang secara efektif dapat membuat objek lain yang Anda inginkan.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
sumber
Anda dapat menggunakan objek Destructuring sebagai parameter konstruktor di ES6
Berikut polanya:
Anda tidak dapat memiliki banyak konstruktor, tetapi Anda dapat menggunakan nilai destruktur dan default untuk melakukan apa yang Anda inginkan.
Dan Anda dapat melakukan ini jika Anda ingin mendukung konstruktor 'tanpa parameter'.
sumber
Useges:
sumber
Ini adalah contoh yang diberikan untuk beberapa konstruktor dalam Pemrograman dalam HTML5 dengan JavaScript dan CSS3 - Referensi Ujian .
sumber