Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Menyusun Kod JavaScript Berasaskan Prototaip Semasa Memelihara Rujukan dan Warisan Objek?

Bagaimanakah Saya Boleh Menyusun Kod JavaScript Berasaskan Prototaip Semasa Memelihara Rujukan dan Warisan Objek?

Patricia Arquette
Lepaskan: 2024-11-17 17:48:01
asal
935 orang telah melayarinya

How Can I Organize Prototype-Based JavaScript Code While Preserving Object References and Inheritance?

Mengatur JavaScript Berasaskan Prototaip Sambil Memelihara Rujukan dan Warisan Objek

Dilema: Menyusun Semula Kod untuk Mempertingkatkan Struktur

Warisan Prototaip ialah paradigma JavaScript yang berkuasa tetapi mengurus aplikasi besar boleh mencabar. Pertimbangkan kelas karusel dengan pelbagai fungsi:

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}
Salin selepas log masuk

Pemfaktoran semula untuk organisasi kod yang lebih baik mungkin melibatkan pengumpulan fungsi ke dalam sub-objek:

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}
Salin selepas log masuk

Walau bagaimanapun, perubahan ini menimbulkan masalah: " kata kunci ini" dalam fungsi ini tidak lagi merujuk kepada contoh karusel.

Mengatasi Isu "ini"

Mengekalkan konteks "ini" adalah penting, terutamanya dalam senario di mana kelas mewarisi daripada kelas induk. Fungsi mengatasi dalam kelas yang diwarisi mesti mengekalkan tingkah laku "ini" yang betul.

Penyelesaian

Pembungkusan Sub-Objek

Satu pendekatan ialah mentakrifkan Kawalan sebagai kelas yang berasingan dan menyimpan rujukan kepada contoh karusel:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..
Salin selepas log masuk

Sementara penyelesaian ini menangani isu "ini", ia menghalang pelaksanaan Kawalan mengatasi.

Suntikan Kebergantungan

Pendekatan yang lebih fleksibel melibatkan suntikan kebergantungan:

var Controls = function (controllable_object) {
    this.ref = controllable_object;
};
Controls.prototype.next = function () {
    this.ref.foo();
}
// ..

var Carousel = function () {
        this.controllers = [];
    };
Carousel.prototype.addController = function (controller) {
        this.controllers.push(controller);
    };
// ..
Salin selepas log masuk

Dalam senario ini, kelas karusel boleh menambah berbilang pengawal, menampung berbilang set fungsi dan membolehkannya mudah mengatasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun Kod JavaScript Berasaskan Prototaip Semasa Memelihara Rujukan dan Warisan Objek?. 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