new 一個(gè)對象的過程

  1. 創(chuàng)建一個(gè)新的空對象

  2. 將構(gòu)造函數(shù)的作用域賦給新對象(this指向它)

  3. 新對象增加構(gòu)造函數(shù)的基本方法和屬性。

  4. 返回新對象

實(shí)現(xiàn)

function create() {
  //創(chuàng)建一個(gè)空對象
  let obj = new Object();
  //獲取構(gòu)造函數(shù)
  let Constructor = [].shift.call(arguments);
  //鏈接到原型
  obj._proto_ = Constructor.prototype;
  //綁定this值
  let result = Constructor.apply(obj, arguments); //使用apply,將構(gòu)造函數(shù)中的this指向新對象,這樣新對象就可以訪問構(gòu)造函數(shù)中的屬性和方法
  //返回新對象
  return typeof result === "object" ? result : obj; //如果返回值是一個(gè)對象就返回該對象,否則返回構(gòu)造函數(shù)到一個(gè)實(shí)例對象
}

使用

function People(name, age) {
  this.name = name;
  this.age = age;
}
//通過new創(chuàng)建構(gòu)造實(shí)例
let people1 = new People("Jack", 20);
console.log(people1.name); //Jack
console.log(people1.age); //20
//通過create方法創(chuàng)建實(shí)例
let people2 = create(People, "Rose", 18);
console.log(people2.name); //Rose
console.log(people2.age); //18
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容