constructorデザインモード

4153 ワード

古典的なオブジェクト指向プログラミング言語では、constructorは、新しいオブジェクトを初期化するために使用される特殊な方法であり、いったんオブジェクトにメモリが割り当てられたら.
JavaScriptの中ではほとんどのものが対象ですが、私たちが興味を持つのは対象のconstructorです.
オブジェクトのコンストラクタは、特定の種類のオブジェクトを作成するために使用されます.オブジェクトを使用する場合も、パラメータを受信する場合もあります.コンストラクタはオブジェクトを作成する際に、メンバーの属性と方法の値を設定するために使用できます.
オブジェクトを作成
JavaScriptでオブジェクトを作成する3つの共通の方法は以下の通りです.
//             

var newObject = {}

// or

var newObject = Object.create( Object.prototype )

// or

var newObject = new Object();
最後の方法は、オブジェクトの作成が指定された値に入ることができます.伝達がなければ、空のオブジェクトを作成し、それを返します.
  String,  String,   new String();
  Number,  Number,   new Number();
  Object,  Object,     
オブジェクトにキーと値を指定するには、次の4つの方法があります.
ES 3対応方法
// 1. `.`(Dot)   
//     
newObject.someKey = 'Hello world';
//     
var value = newObject.somekey;


// 2. '[]'     
//     
newObject["someKey"] = "Hello World";
//     
var value = newObject["someKey"];
ES 5対応の方法(より多くの情報を知るために、転送してください.http://kangax.github.com/es5-compat-table/)
// 3. Object.defineProperty
//     
Object.defineProperty(newObject, "someKey", {
    value: "Hello World",
    writable: true,
    enumerable: true,
    configurable: true
})
//        , 1,2     

//     Object.defineProperty      [https://segmentfault.com/a/1190000007434923](https://segmentfault.com/a/1190000007434923)

// 4. Object.defineProperties
//     

Object.defineProperties(newObject, {
    "someKey": {
        value: "Hello World",
        writable: true
    },
    "anotherKey": {
        value: "Ha ha",
        writable: true
    }
})

//        , 1,2     
オブジェクトの継承
前述したように、いくつかのオブジェクトの作成方法について述べましたが、3つのオブジェクトの作成においては、最初の方法が最も簡単で効率的で、他の2つの内部は対象の継承を使用しています.次の面接では、第二、三の作成対象の例を紹介します.
//    
var obj = {};
obj.a=1;
obj.a -> 1
var obj2 = Object.create(obj)
obj2.a -> 1

//    
var obj = {};
obj.a = 1;
obj.a -> 1
var obj2  = new Object(obj);
obj2.a -> 1
したがって、空のオブジェクトを作成するには、最初の方法がいいです.オブジェクトの継承を達成するには、第二、三の方法の違いは、前者はES 3、後者はES 5です.
// Object.create        :
Object.create = function(o) {
    function F(){}
    F.prototype=o;
    return new F();
}
constructorの基礎
周知のように、JavaScriptの一つはclassという概念をサポートしていませんが、オブジェクトの構造関数をサポートしています.キーワードnewを通じて、オブジェクトと関数で定義されたメンバーを作成したいです.
constructorの内部において、thisキーワードは作成された新しいオブジェクトの参照である.オブジェクトの作成過程を温めるために、ベースのconstructorを下記に示します.
function Car( model, year, miles ) {

  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() ); -> "Honda Civic has done 20000 miles"
console.log( mondeo.toString() ); -> "Ford Mondeo has done 5000 miles"·
今すぐデザインモデルとして定義すれば、多くの人がそれを使えないと信じています.一つは継承性であり、もう一つはオブジェクトのインスタンスを作成する毎にtoString()方法が再定義され、理想的な実施形態はtoString()が異なるインスタンスタイプの間で共有することを実現することである.
constructorとprototype
JavaScriptには、Functionは他のオブジェクトと同じprototypeがあります.私たちがcontructorでオブジェクトを作成すると、すべてのconstructorのprototypeの属性が新しいオブジェクトに引き継がれます.上記の例は次のように修正できます.
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";
};
 
//   :
 
//     car    
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
 
//     
console.log( civic.toString() ); -> "Honda Civic has done 20000 miles"
console.log( mondeo.toString() ); -> "Ford Mondeo has done 5000 miles"·
このように、toString()は、異なるオブジェクト・インスタンス間での共有を実現するであろう.
他のデザインモードに関する文章は「大所着目、小所着手」に変えてください.デザインモードシリーズ