眾所周知,大多數的語言中都有new這個關鍵詞,沒有對象,那就new一個吧。
在js中,new主要完成了四件事情
1 // new 做了什么 2 const obj = {} 3 obj.__proto__ = create.prototype 4 // 構造函數如果有返回值得話,就返回這個對象,沒有返回對象的話就返回創建的這個obj 5 var result = create.call(obj,this.arguments) 6 return result instanceof Object?result:obj
1.創建一個空的對象
2.第二,每個對象都有一個隱形原型屬性:__proto__,這個屬性指向的是構造函數的原型(js原型、原型鏈知識)
就是obj.__proto__ = create.prototype
3.然后利用call函數改變create函數的內部this指向為obj
4.判斷構造函數是否有返回對象,如果返回對象的話new就返回那個對象(代碼中的result),否則返回新創建的obj