javaScript 建立新物件的過程
阿新 • • 發佈:2021-12-24
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