首先看看new具有哪些功能:
- 創(chuàng)建一個對象派哲,對象的原型指向構造函數(shù)的prototype偎血。
- 構造函數(shù)里的this指向的就是這個對象霸株。
- 執(zhí)行構造函數(shù)里的語句雕沉。
但還要考慮一點,構造函數(shù)里可以返回一個自定義的值去件,這個值es有這樣的規(guī)范:
遇上返回Object就返回自身坡椒,否則返回構造的Object扰路。
function _new(func,...arg){
// 1. 創(chuàng)建一個對象,對象的原型指向構造函數(shù)的prototype倔叼。
let obj=Object.create(func.prototype)
// 將構造函數(shù)里的this指向這個對象汗唱,病執(zhí)行構造函數(shù)里的語句
const ret=fn.appay(obj,arg)
// 遇上返回Object就返回自身,否則返回構造的Object
return ret instanceof Object?ret:obj
}