Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menghantar Argumen Secara Dinamik kepada Pembina Menggunakan Operator `baru` dalam JavaScript?

Bagaimanakah Saya Boleh Menghantar Argumen Secara Dinamik kepada Pembina Menggunakan Operator `baru` dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-04 10:58:11
asal
927 orang telah melayarinya

How Can I Dynamically Pass Arguments to a Constructor Using the `new` Operator in JavaScript?

Mengatasi Had Kaedah Apply() dengan Operator Baharu

Dalam JavaScript, kaedah apply() membenarkan untuk menghantar nombor arbitrari argumen sebagai tatasusunan kepada fungsi yang dipratentukan, berpotensi memperluaskan fungsinya. Walau bagaimanapun, apabila digabungkan dengan pengendali baharu, yang penting untuk instantiasi objek, pendekatan ini memberikan cabaran unik: pembina biasanya menjangkakan bilangan argumen tetap.

Soalan saya timbul daripada keinginan untuk mencipta contoh objek menggunakan operator baharu sambil memberikan hujah secara dinamik kepada pembina.

The Halangan:

Pada mulanya, saya berusaha untuk melaksanakan konsep ini:

function Something(){
    // Initializations
}
function createSomething(){
    return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); //'s' is an instance of Something
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini terbukti tidak berkesan.

Menangani Isu:

Banyak penyelesaian telah dicadangkan sebagai tindak balas kepada pertanyaan saya, tetapi tiada yang menawarkan integrasi yang lancar bagi apply() dengan pengendali baharu. Penyelesaian alternatif telah dicadangkan, masing-masing mempunyai kelebihan dan kaveat tersendiri.

Penyelesaian Pilihan:

Penyelesaian yang paling sesuai dengan saya, yang dicadangkan oleh Matthew Crumley, menggunakan seorang yang bijak pendekatan menggunakan Function.prototype.bind dan fungsi perantaraan:

var createSomething = (function() {
    function F(args) {
        return Something.apply(this, args);
    }
    F.prototype = Something.prototype;

    return function() {
        return new F(arguments);
    }
})();
Salin selepas log masuk

Ini pendekatan mengelak daripada apply() dan menggunakan fungsi berasingan, F, yang melaksanakan kefungsian yang dimaksudkan.

Satu Pilihan Berdaya maju:

Satu lagi penyelesaian ketara, ditawarkan oleh Simon Lyall, memanfaatkan Function.prototype.bind dan eval():

function createSomething(){
  var args = [].slice.call(arguments),
      constr = eval("new ("+Something.name+"(" + args+ "))");
  return constr;
}
Salin selepas log masuk

Sambil elegan dan ringkas, pendekatan ini bergantung pada eval(), yang mungkin menimbulkan kebimbangan mengenai keselamatan dan keserasian merentas persekitaran yang berbeza.

Kesimpulan:

Walaupun kaedah apply() menyediakan cara yang berkuasa untuk mengendalikan bilangan hujah yang dinamik, penyepaduan langsungnya dengan pengendali baharu tetap tidak disokong dalam JavaScript. Sebaliknya, penyelesaian alternatif tersedia untuk mencapai kefungsian yang serupa, membolehkan penciptaan contoh objek yang fleksibel dengan argumen yang berbeza-beza.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Argumen Secara Dinamik kepada Pembina Menggunakan Operator `baru` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan