ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript コンストラクター パターンの分析例

JavaScript コンストラクター パターンの分析例

小云云
小云云オリジナル
2018-01-22 09:15:561470ブラウズ

この記事では、主に JavaScript プログラミング設計パターンのコンストラクター パターンを紹介します。コンストラクター パターンの概念と原理を簡単に説明し、コンストラクター パターンの定義と使用法をサンプルの形で分析します。 . 皆さんのお役に立てれば幸いです。

この記事では、JavaScript プログラミングの設計パターンのコンストラクター パターンを例を挙げて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

古典的な OOP 言語では、コンストラクター (コンストラクターとも呼ばれます) は、オブジェクトを初期化するために使用される特別なメソッドです。 JS ではすべてがオブジェクトであるため、オブジェクト コンストラクターについてよく言及されます。

オブジェクト コンストラクターは、指定された型 (クラス) のオブジェクトを作成するために使用され、パラメーターを受け入れてオブジェクトのプロパティとメソッドを初期化できます。

オブジェクトの作成

JS では、オブジェクトの作成によく使用される 3 つのメソッドがあります:


//1, 推荐使用
var newObject = {};
//2,
var newObject = Object.create( null );
//3, 不推荐
var newObject = new Object();

ただし、これはプロパティやメソッドを持たずに 3 つの空のオブジェクトを作成するだけです。次の 4 つの方法でオブジェクトのプロパティとメソッドを設定できます。


// ECMAScript 3 兼容的方式
// 1. 常规对象定义方式
//设置属性
newObject.someKey = "Hello World";
//获取属性
var key = newObject.someKey;
// 2. 方括号方式
// 设置属性
newObject["someKey"] = "Hello World";
//获取属性
var key = newObject["someKey"];
// 仅仅用于ECMAScript 5
// 3. Object.defineProperty
// 设置属性
Object.defineProperty(
 newObject, "someKey",
 { value: "for more control of the property's behavior",
  writable: true,
  enumerable: true,
  configurable: true
});
//可以通过下面的函数简化属性设置
var defineProp = function ( obj, key, value ){
  config.value = value;
  Object.defineProperty( obj, key, config );
};
// 使用方法
var person = Object.create( null );defineProp( person, "car", "Delorean" );
defineProp( person, "dateOfBirth", "1981" );
defineProp( person, "hasBeard", false );
// 4. Object.defineProperties
//设置属性
Object.defineProperties(
newObject,
{ "someKey": { value: "Hello World", writable: true },
 "anotherKey": { value: "Foo bar", writable: false }
});
// 3和4的获取属性方法同1,2.

基本的なコンストラクター

JS にはクラスの概念がないことはわかっていますが、コンストラクターを使用したオブジェクトの作成もサポートしています。

[new] キーワードを使用すると、関数をコンストラクターのように動作させ、独自のオブジェクト インスタンスを作成できます。

基本的なコンストラクターの形式は次のとおりです:


function Car( model, year, miles ) {
  //这里,this指向新建立的对象自己
  this.model = model;
  this.year = year;
  this.miles = miles;
  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}
//用法
// 建立两个car实例
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
// 输出结果
console.log( civic.toString() );
console.log( mondeo.toString() );

これは、2 つの主な問題があります。

まず、継承が難しいことです。インスタンスは関数として一度定義されると、Car タイプのすべてのインスタンスで共有される必要があります。

プロトタイプ コンストラクターの使用

JS にはプロトタイプ [プロトタイプ] という優れた機能があります。

それを使用すると、オブジェクトの作成時に、コンストラクター プロトタイプ内のすべてのプロパティをオブジェクト インスタンスによって取得できます。

このようにして、複数のオブジェクト インスタンスが同じプロトタイプを共有できます。

前の Car の例を次のように改良します。


function Car( model, year, miles ) {
  this.model = model;
  this.year = year;
  this.miles = miles;
}
Car.prototype.toString = function () {
  return this.model + " has done " + this.miles + " miles";
};
// 用法
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
//输出
console.log( civic.toString() );
console.log( mondeo.toString() );

上記の例では、toString() メソッドが複数の Car オブジェクト インスタンスによって共有されます。

関連する推奨事項:

JavaScript デザイン パターン ファクトリ パターンとコンストラクター パターン_javascript スキル

Node.js デザイン パターンはエンコードにストリームを使用します

JS デザイン パターンの構造フライウェイト パターンの簡単な紹介

以上がJavaScript コンストラクター パターンの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。