Bolehkah Kaedah .apply() Digunakan dengan Operator baharu?
Dalam JavaScript, mencipta contoh objek menggunakan operator baharu biasanya melibatkan secara eksplisit menyampaikan hujah kepada pembina. Walau bagaimanapun, adalah wajar untuk menghantar bilangan argumen yang berubah-ubah. Soalan ini meneroka kemungkinan menggunakan kaedah .apply() bersama-sama dengan pengendali baharu untuk mencapai fleksibiliti ini.
Cabaran
Pada mulanya, seseorang mungkin mencuba kod berikut:
function Something() { // init stuff } function createSomething() { return new Something.apply(null, arguments); } var s = createSomething(a, b, c); // 's' is an instance of Something
Walau bagaimanapun, pendekatan ini tidak berfungsi kerana pengendali baharu tidak serasi dengan Kaedah .apply().
Penyelesaian
Pelbagai penyelesaian telah dicadangkan untuk mengatasi had ini:
1. Kaedah Matthew Crumley
Penyelesaian ini menggunakan fungsi perantara yang diwarisi daripada pembina sasaran:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. Function.prototype.bind
ECMAScript5 memperkenalkan kaedah Function.prototype.bind, yang membenarkan sebahagiannya menggunakan fungsi:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Ini boleh digunakan seperti berikut:
var s = newCall(Something, a, b, c);
Kelebihan Penggunaan Function.prototype.bind
Pendekatan ini mempunyai beberapa kelebihan:
Penjelasan
Function.prototype.bind mencipta fungsi baharu yang mewarisi sifat fungsi asal. Dengan menggunakan sebahagian fungsi pembina dengan hujah yang diingini, kami kemudiannya boleh mencipta tika menggunakan kata kunci baharu.
Atas ialah kandungan terperinci Bolehkah Operator `baru` JavaScript berfungsi dengan Kaedah `.apply()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!