I. Object.create()
Object.create():Objectの組み込みメソッドで、既存のオブジェクトを使用して新しいオブジェクトを作成します。
Object.create ( proto, [ propertiesObject ] )
- proto: 新しいオブジェクトのプロトタイプとなるオブジェクトです。
- propertiesObject : は、新しく作成されたオブジェクトのプロパティ名を持つオブジェクトです。引数 propertiesObject がNULL またはオブジェクトでない場合、エラーがスローされます!
実現。
//Object.create 基礎となる実装
Object.create = function(obj){
var Function = function(){};
Function.prototype = obj;
return new Function();
}
var parent = {
name: "parent";
age: 50;
}
//-----child1
var child1 = Object.create(parent);
//child1 は新しいオブジェクトである{},しかし、child1のプロトタイプ・オブジェクトは親である。 .nameは "parent "である // なぜならchild1はそのオブジェクトにname属性を持っていないので、プロトタイプオブジェクトでそれを探すからである。,child1 .__proto__.name親" の場合
//----child2
var child2 = Object.create(parent, {weight: 300});
// child2 = {weight: 300};
しかし、プロトタイプ・オブジェクトは親である.
つまり、nullが新しく生成されたオブジェクトのプロトタイプに設定されるため、当然、プロトタイプ・チェイン上の属性を持ちません。
使用シナリオ
- クリーンなオブジェクトを作成したいプロパティが現在のオブジェクトのプロパティであるかどうかを判断するためにhasOwnPropertyを使用することを省略することは可能でしょう。
create(null)を使用するもう1つの理由は、for..inループを使用する際にオブジェクトのプロトタイプチェイン内のプロパティがトラバースされるため、create(null)を使用することでプロパティをチェックする必要がなくなることです。
II.
コンストラクタを使用して、ユーザー定義オブジェクト・タイプのインスタンスまたは組み込みオブジェクトのインスタンスを作成します。元のコンストラクタ・オブジェクトのプロパティは保持されます。
new constructor ( [aguments] )
コンストラクタ呼び出しパターンは、プロシージャを実行するために使用されます:
新しいオブジェクトを作成します;
新しいオブジェクトのプロトタイプをコンストラクタのプロトタイプにポイントします;
コンストラクタのバインディングthis;を実行します。
オブジェクトを返します。
Function.method('new', function(){ // コンストラクタ関数のプロトタイプオブジェクトを継承した新しいオブジェクトを作成 var newObj= Object.create(this.prototype);
// this を新しいオブジェクトにバインドしてコンストラクタ関数を呼び出します var result= this.apply(newObj, arguments); // this 以外の値を返す場合 var result= this.
// 返り値がオブジェクトでない場合は、新しいオブジェクトを返します return newObj; }); // コンストラクタ関数を呼び出します。
注:Carオブジェクトのコンストラクタを呼び出し、呼び出しによってobjのthisをCarオブジェクトにバインドします。このステップでは、Carオブジェクトのプロパティをobjに継承します。
例
var Parent = function(name, age){
this.name = name;
this.age = age;
}
var Child = new Parent("child", "18");
Child._proto_ == Parent.prototype; //true
III. {}: オブジェクトリテラルの作成
var obj = {name:"test", age:18};
obj.__proto__ == Object.prototype //true
IV: 違い
| コンストラクタ | コンストラクタ | コンストラクタ |
| プロトタイプチェーン | プロトコンストラクタのプロトタイプ属性 | コンストラクタ |
| 動作対象 | 機能 | 関数とオブジェクト |





