首頁 > web前端 > js教程 > 如何組織 JavaScript 原型並在繼承過程中維護「this」上下文?

如何組織 JavaScript 原型並在繼承過程中維護「this」上下文?

Barbara Streisand
發布: 2024-11-19 21:48:03
原創
726 人瀏覽過

How Can I Organize JavaScript Prototypes and Maintain `this` Context During Inheritance?

使用保留的物件參考和繼承組織JavaScript 原型

在JavaScript 中,隨著應用程式變得越來越大,使用原型和繼承組織程式碼可能會變得具有挑戰性。考慮以下場景:我們有一個具有多個函數的輪播類別:

Carousel.prototype.next = function () {...}
Carousel.prototype.prev = function () {..}
Carousel.prototype.bindControls = function () {..}
登入後複製

為了改進程式碼組織,我們可能會想要將這些函數分組為一個物件:

Carousel.prototype.controls = {
   next: function () { ... } , 
   prev: function() { ... },
   bindControls: function () { .. }
}
登入後複製

但是,這種方法破壞了對this 物件的引用,導致從類別繼承時出錯。為了解決這個問題,我們可以探索不同的策略:

建立Controls 類別:

一個方法是定義一個單獨的Controls 類,如下所示:

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

var Carousel = function () {
    this.controls = new Controls(this);
};
// ..
登入後複製

這允許我們維護對原始物件的引用,但它不允許重寫控制項。

使用依賴注入:

更靈活的方法是利用依賴注入:

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);
    };
// ..

var carousel = new Carousel();
carousel.addController(new Controls(carousel));
登入後複製

這允許我們創建多個控制器並將它們動態添加到輪播中,提供靈活性和覆蓋實現的能力。

以上是如何組織 JavaScript 原型並在繼承過程中維護「this」上下文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板