JavaScript プロトタイプを整理し、継承中に「この」コンテキストを維持するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-19 21:48:03
オリジナル
675 人が閲覧しました

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 オブジェクトへの参照が壊れ、クラスから継承するときにエラーが発生します。この問題に対処するために、さまざまな戦略を検討できます:

コントロール クラスの作成:

1 つのアプローチは、次のように別個の 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 プロトタイプを整理し、継承中に「この」コンテキストを維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート