Rumah > hujung hadapan web > tutorial js > Bolehkah Operator `baru` JavaScript berfungsi dengan Kaedah `.apply()`?

Bolehkah Operator `baru` JavaScript berfungsi dengan Kaedah `.apply()`?

Barbara Streisand
Lepaskan: 2024-12-17 09:31:25
asal
345 orang telah melayarinya

Can JavaScript's `new` Operator Work with the `.apply()` Method?

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
Salin selepas log masuk

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);
    }
})();
Salin selepas log masuk

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));
}
Salin selepas log masuk

Ini boleh digunakan seperti berikut:

var s = newCall(Something, a, b, c);
Salin selepas log masuk

Kelebihan Penggunaan Function.prototype.bind

Pendekatan ini mempunyai beberapa kelebihan:

  • Ia berfungsi dengan semua pembina, termasuk yang istimewa seperti Date.
  • Ia boleh digunakan secara ringkas, terus menghantar hujah kepada baharu.
  • Ia mengekalkan pembina asal prototaip.

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!

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