如何实现一个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

下期再会!

相关文章
相关标签/搜索