ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript でカスタム オブジェクトを作成するプロトタイピングとクロージャの方法は何ですか?

JavaScript でカスタム オブジェクトを作成するプロトタイピングとクロージャの方法は何ですか?

Patricia Arquette
リリース: 2024-12-14 16:54:10
オリジナル
416 人が閲覧しました

What are the Prototyping and Closure Ways to Create Custom Objects in JavaScript?

JavaScript でカスタム オブジェクトを「適切に」作成する方法

カスタム オブジェクトの作成

主に 2 つの方法がありますJavaScript でカスタム オブジェクトを作成する: プロトタイピングの方法とクロージャway.

プロトタイピング方法

このメソッドでは、オブジェクトのプロパティとメソッドがそのプロトタイプで定義されます。次の例では、Shape オブジェクトと、その Shape をサブクラス化する Circle オブジェクトを作成します。

function Shape(x, y) {
  this.x = x;
  this.y = y;
}

Shape.prototype.toString = function() {
  return 'Shape at ' + this.x + ', ' + this.y;
};

function Circle(x, y, r) {
  Shape.call(this, x, y); // Invoke base class constructor
  this.r = r;
}

Circle.prototype = new Shape(); // Create prototype inheritance link

Circle.prototype.toString = function() {
  return 'Circular ' + Shape.prototype.toString.call(this) + ' with radius ' + this.r;
};
ログイン後にコピー

Closure Way

このメソッドは継承を使用しません。代わりに、各インスタンスにはプロパティとメソッドの独自のコピーがあります。

function Shape(x, y) {
  var that = this;

  this.x = x;
  this.y = y;

  this.toString = function() {
    return 'Shape at ' + that.x + ', ' + that.y;
  };
}

function Circle(x, y, r) {
  var that = this;

  Shape.call(this, x, y); // Invoke base class constructor
  this.r = r;

  var _baseToString = this.toString;
  this.toString = function() {
    return 'Circular ' + _baseToString.call(that) + ' with radius ' + that.r;
  };
};
ログイン後にコピー

長所と短所

プロトタイピング方法

  • 利点: 大きなオブジェクトに対して効率的階層
  • 短所: 実装がより複雑、instanceof 演算子が機能する

クロージャ方法

  • 長所: 実装が簡単、独立インスタンス
  • 短所: 少ない効率的で、直接のインスタンスのサポートはありません

適切な方法の選択

選択はプロジェクトの特定の要件によって異なります。複数のレベルの継承を持つ大きなオブジェクト階層の場合は、プロトタイピングが優先される場合があります。単純で独立したオブジェクトの場合、多くの場合、クロージャの方法の方が便利です。

以上がJavaScript でカスタム オブジェクトを作成するプロトタイピングとクロージャの方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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