天天看點

前端手寫(十五)——手寫new的過程

一、寫在前面

我們如果想要手寫new的實作過程,就必須要明白,當我們對一個構造函數執行

new

操作時,到底幹了什麼。

1、建立一個新對象。
2、讓這個新的對象的原型指向該構造函數的原型對象。
3、執行構造函數,并且将構造函數指向新的對象。
4、拿到構造函數最後傳回的結果,判斷是否是對象或者函數,如果是的話,則直接
傳回。如果不是則傳回新建立的對象。
           

二、手寫過程

function createNew(con) {
  let result = Object.create(con.prototype)
  let args = [].slice.call(arguments, 1)
  let ret = con.apply(result, args) 
  return ((typeof ret === 'object' && ret !== null) || typeof ret === 'function') ? ret : result
}
function Person(name, age, score) {
  this.name = name
  this.age= age
  this.score = score
  return {name:this.name}
}

let rest = createNew(Person, 'dmc', 21, 100)
console.log(rest)
           

繼續閱讀