js基礎複習之自己實現一個new方法
阿新 • • 發佈:2021-01-19
技術標籤:javascriptjavascript
我們要知道new一個新的物件的時候,底層做了下面4件事情:
- 新生成了一個物件,即{}
- 連結到原型(通俗理解就是new出來的新物件隱式原型__proto__連結到建構函式顯式原型prototype上)
- 繫結 this,將步驟 1 新建立的物件作為 this 的上下文(實際是執行了建構函式 並將建構函式作用域指向新物件)
- 返回新物件
function _new(constructor, ...arg) {
var obj = {}
obj.__proto__ = constructor.prototype
var result = constructor. apply(obj, arg) // 這一步繫結constructor內部的this到obj上,並且執行constructor建構函式
return Object.prototype.toString.call(result) === '[object Object]' ? result : obj
}
// 測試
const myFunc = function(name) {
this.name = name
}
var res = _new(myFunc, 'DeanWade')
console.log(res)