如何實現一個new

最近真的是一點學習和上班的熱情都沒有,讓我一度都以爲本身病了,但是沒辦法啊,前端搬磚就得努力 啊,今天就來總結一下啦 ~前端

如何實現一個new

先來總結一下 callapply d的用法吧數組

call

call 方法第一個參數是要綁定給this的值,後面傳入的是一個「參數列表」。當第一個參數爲null、undefined的時候,默認指向window。app

看一個例子:函數

輸出: My name is Dot Dolby學習

apply

apply接受兩個參數,第一個參數是要綁定給this的值,第二個參數是一個參數數組。當第一個參數爲null、undefined的時候,默認指向window。this

是否是以爲和前面寫的call用法很像,事實上apply 和 call 的用法幾乎相同, 惟一的差異在於:當函數須要傳遞多個變量時, apply 能夠接受一個數組做爲參數輸入, call 則是接受一系列的單獨變量。spa

New

先理清楚 new 關鍵字調用函數都的具體過程,那麼寫出來就很清楚了prototype

1.首先建立一個空的對象,空對象的__proto__屬性指向構造函數的原型對象
2.把上面建立的空對象賦值構造函數內部的this,用構造函數內部的方法修改空對象
3.若是構造函數返回一個非基本類型的值,則返回這個值,不然上面建立的對象
code

function _new(fn, ...arg) {
    var obj = Object.create(fn.prototype);
    const result = fn.apply(obj, ...arg);
    return Object.prototype.toString.call(result) == '[object Object]' ? result : obj;
}
複製代碼

初步完成啦 ~ 有不足的歡迎指導!cdn

下期再會!

相關文章
相關標籤/搜索