js的new操作符到底做了什么?


1、創建了一個空的js對象(即{})

2、將空對象的原型prototype指向構造函數的原型

3、將空對象作為構造函數的上下文(改變this指向)

4、對構造函數有返回值的判斷

 

function create(Con,...args){ //1、創建一個空的對象  let obj = {}; // let obj = Object.create({});  //2、將空對象的原型prototype指向構造函數的原型  Object.setPrototypeOf(obj,Con.prototype); // obj.__proto__ = Con.prototype  //3、改變構造函數的上下文(this),並將剩余的參數傳入  let result = Con.apply(obj,args); //4、在構造函數有返回值的情況進行判斷  return result instanceof Object?result:obj; }

在new的時候,會對構造函數的返回值做一些判斷:

1、如果返回值是基礎數據類型,則忽略返回值;

2、如果返回值是引用數據類型,則使用return 的返回,也就是new操作符無效;

 

1.var obj= {},創建了一個空對象obj{},也就是開辟了一塊內存地址,新建了一個對象實例(我是這樣認為的,如果有不對的歡迎指出);

2.obj.__proto__ = Person.prototype; 將 lisi 這個空對象的__proto__指向Person的prototype,也就是設置原型鏈;

3.var result = Person.call(obj),改變this的指向,讓this指向obj對象;

4.判斷Person的返回值類型,如果是引用類型,則返回這個引用類型的對象,如果是普通值類型,就返回obj;

 

 


免責聲明!

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



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