1. 程式人生 > >javascript中new運算符

javascript中new運算符

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運算符