1. 程式人生 > 其它 >javaScript 建立新物件的過程

javaScript 建立新物件的過程

1 function Mother(lastName){
2   this.lastName = lastName
3 }
4 
5 var son = new Mother('Da')

1.建立一個新物件:son

2.新物件會執行[[prototype]]連線:son.__proto__ = Mother.prototype (這裡prototype是物件的屬性,預設指向自己;__proto__是例項的屬性,指的是建立該例項的物件)

3.新物件和函式呼叫的this會繫結起來:Mother.call(son,'Da')

4.執行建構函式中的程式碼:son.lastName

5.若函式沒有返回值,那麼就會自動返回這個新物件

上面的程式碼等同於:

1 function Mother(lastName){
2   this.lastName = lastName
3   return this
4 }
5 
6 var son = Mother('Da')

可以看到沒有用new關鍵字,但是mother中多了返回this,相等於返回了一個新物件,這種寫法也是可以的。

關於原型物件prototype,是物件的隱藏屬性,在建立物件例項的時候,這個屬性也在例項當中,上面的程式碼son.__proto__ === mother.prototype 也可以證實這一點。

關於原型鏈,這裡有兩個物件A和B,A有屬性a,b是B物件建立的例項,此時若想例項b來訪a屬性,則需要A,B物件建立聯絡,B.prototype === new A(),讓B的原型指向A,B建立的例項就可以使用A的屬性。

最後說一下關於this繫結

this在函式中宣告預設繫結到函式所在的作用域,一般就是window這個全域性物件。

隱式繫結:在物件中用this便會指向物件本身

硬繫結:用call()方法來繫結要呼叫的物件,可以修改this指向

建構函式繫結:例項化後的例項呼叫方法會繫結自身例項物件

在嚴格模式中this會變成undefined