Dalam JavaScript, membina contoh objek menggunakan operator 'baharu' biasanya dilakukan dengan terus menghantar hujah kepada pembina. Walau bagaimanapun, terdapat senario di mana seseorang mungkin ingin memberikan hujah secara dinamik. Artikel ini menjawab persoalan sama ada menggunakan '.apply()' dengan pengendali 'baru' untuk mencapai ini boleh dilaksanakan.
Walaupun ia serba boleh, kaedah '.apply()' tidak boleh digunakan secara langsung dengan pengendali 'baru'. Percubaan untuk berbuat demikian akan mengakibatkan tingkah laku atau ralat yang tidak dijangka.
Menyedari keperluan untuk fungsi sedemikian, pelbagai penyelesaian inovatif telah dicadangkan oleh komuniti JavaScript.
Satu pendekatan, dikreditkan kepada Matthew Crumley, menggunakan prototaip fungsi untuk mencipta penyelesaian:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
Penyelesaian ini berkesan mencipta fungsi baharu dengan gelagat yang diingini.
ECMAScript 5's 'Function.prototype.bind ' menawarkan penyelesaian yang lebih bersih:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Kaedah ini dengan lancar berintegrasi dengan operator 'baharu' dan boleh digunakan pada semua jenis pembina, termasuk mereka yang mempunyai gelagat istimewa seperti 'Tarikh'.
Walaupun tidak digalakkan kerana potensi keselamatan kebimbangan, kaedah 'eval' menyediakan penyelesaian lain:
var s = eval("new Something(" + [a, b, c] + ")");
Penyelesaian ini memanfaatkan kaedah bind() untuk mencipta fungsi yang menerima hujah yang diingini. Kemudian, operator 'baharu' digunakan untuk membuat instantiate objek daripada fungsi itu.
Mencipta objek dengan argumen boleh ubah menggunakan '.apply()' dan operator 'baru' memerlukan beberapa kepintaran. Dengan memanfaatkan ciri JavaScript yang tersedia, pembangun boleh melaksanakan teknik ini untuk mencapai kefungsian yang diingini.
Atas ialah kandungan terperinci Bolehkah Anda Menggunakan `.apply()` dengan Operator `new` dalam JavaScript untuk Mencipta Objek dengan Argumen Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!