javascript中new運算符
阿新 • • 發佈:2018-12-26
use bsp ont 繼承 strong scrip ret 正常 foo
創建一個用戶自定義的對象需要兩步:
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中的原型鏈,繼承,構造函數
javascript中new運算符