「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > オブジェクトの参照と継承を保持しながら、プロトタイプベースの JavaScript コードを編成するにはどうすればよいですか?

オブジェクトの参照と継承を保持しながら、プロトタイプベースの JavaScript コードを編成するにはどうすればよいですか?

2024 年 11 月 20 日に公開
ブラウズ:234

How Can I Organize Prototype-Based JavaScript Code While Preserving Object References and 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」キーワードはカルーセル インスタンスを参照しなくなりました。

「this」問題の克服

メンテナンス「this」コンテキストは、特にクラスが親クラスから継承するシナリオでは非常に重要です。継承されたクラスのオーバーライド関数は、適切な「this」動作を保持する必要があります。

ソリューション

サブオブジェクト ラッピング

1 つの方法は、コントロールを別のクラスとして定義し、参照を保存することです。カルーセル インスタンスへ:

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

この解決策は「この」問題に対処しますが、コントロールの実装のオーバーライドを防ぎます。

依存性の注入

より柔軟なアプローチには依存性の注入が含まれます:

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

このシナリオでは、カルーセル クラスは複数のコントローラーを追加して、複数の機能セットに対応し、簡単なオーバーライドを可能にします。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3