javascript中new運算子
阿新 • • 發佈:2018-12-26
建立一個使用者自定義的物件需要兩步:
1、通過編寫函式,來定義物件型別。
2、通過new來建立物件例項。
new的工作流程:
1、建立一個空物件(var obj = {};)
2、使該空物件繼承於建構函式的原型(obj.__proto__ = Foo.prototype;)
3、使用指定的引數呼叫建構函式 Foo ,並將 this 繫結到新建立的物件。(Foo.call(obj, x, y, z);)
4、由建構函式返回的物件就是 new 表示式的結果。如果建構函式沒有顯式返回一個物件,則使用步驟1建立的物件。(一般情況下,建構函式不返回值,但是使用者可以選擇主動返回物件,來覆蓋正常的物件建立步驟)
// 無返回值 function Foo() { this.a = 1; } var obj = {}; // 1 obj.__pr0to__ = Foo.prototype; // 2 Foo.call(obj); // 3 {'a': 1}; // 4 // 有返回值 function Foo() { this.a = 1; return {'b': 2}; } var obj = {}; // 1 obj.__pr0to__ = Foo.prototype; // 2 Foo.call(obj); // 3 {'b': 2}; //4
注意:第四步時,若返回的的值不是物件,或是null(null雖然是物件,但特殊),則使用步驟1建立的物件。
new關鍵字建立的物件,和普通物件的區別:
1、建構函式不同。(普通物件的建構函式是Object, new關鍵字物件的建構函式是自定義的。)
2、使用new關鍵字以原型的方式將user物件暴露到window物件中,不使用new關鍵字直接將user物件暴露到window物件中。
javascript中的原型鏈,繼承,建構函式