js的new操作符做了哪些事情


new操作符新建了一個空對象,這個對象原型指向構造函數的prototype,執行構造函數后返回這個對象

1、創建一個空的對象
2、鏈接到原型
3、綁定this指向,執行構造函數
4、確保返回的是對象 
 
 
new過程一共有四個步驟: 
題目解析
先看代碼
  • var Func=function(){
  •  
    };
  •  
    var func=new Func ();

new共經過了4個階段

1、創建一個空對象

var obj = new Object();

2、設置原型鏈(當調用構造函數創建一個新實例后,該實例的內部將包含一個指針(內部屬性),指向構造函數的原型對象)

obj.__proto__= Func.prototype;

3、讓Func中的this指向obj,並執行Func的函數體。(創建新的對象之后,將構造函數的作用域賦給新對象(因此this就指向了這個新對象))

var result =Func.call(obj);

4、判斷Func的返回值類型:

  如果是值類型,返回obj。如果是引用類型,就返回這個引用類型的對象

if (typeof(result) == "object"){
  func=result;
}
else{
    func=obj;;
}

 默認情況下函數返回值為undefined,即沒有顯示定義返回值的話,但構造函數例外,new構造函數在沒有return的情況下默認返回新創建的對象。

但是,在有顯示返回值的情況下,如果返回值為基本數據類型{string,number,null,undefined,Boolean},返回值仍然是新創建的對象

只有在顯示返回一個非基本數據類型時,函數的返回值才為指定對象。在這種情況下,this所引用的值就會被丟棄了

參考:https://blog.csdn.net/lxcao/article/details/52792466


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM