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

javascript中new運算子

建立一個使用者自定義的物件需要兩步:

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中的原型鏈,繼承,建構函式