new 一個對象具體做了什麼

在這裏插入圖片描述
使用關鍵字new創建新實例對象經過了以下幾步:
1、創建一個新對象,如:var person = {};
(新對象的proto屬性指向構造函數的原型對象。)
2、將構造函數的作用域賦值給新對象。(也所以this對象指向新對象)
3、執行構造函數內部的代碼,將屬性添加給person中的this對象。
4、返回新對象person。
在這裏插入圖片描述

  var person = {};  
  person._proto_ = Person.prototype;//引用構造函數的原型對象  
  Person.call(person);//將構造函數的作用域給person,即:this值指向person  

  Function.methos("new", function () {  
     //新創建一個對象,它繼承了構造器的原型對象。  
     var that = Object.create(this.prototype); //此時,this是指向Function構造器的。  
     //調用構造器,綁定this對象到新對象that上  
     var other = this.apply(that, argument); //此時,this對象指向that對象。  
     //如果它的返回值不是一個對象,就返回新的對象。  
     return (typeof other === "object" && other) || that;  
 });  

通過new關鍵字創建某構造函數的新實例對象,就是將原型鏈與實例的this聯繫起來,this指向這個新對象,同時也指向這個構造函數,並且this對象還是這個構造函數的實例。如果沒有使用new操作符,直接用構造函數創建新實例對象,那麼this對象就指向了window對象,不會指向這個新對象的,不管給這個新對象添加什麼屬性,都沒有用,是直接添加到了window對象上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章