chenshuhong / fullstack

我的全栈路线思维导图以及日常知识记录
MIT License
0 stars 0 forks source link

JavaScript深入之new的模拟实现 #2

Open chenshuhong opened 5 years ago

chenshuhong commented 5 years ago

JavaScript深入之new的模拟实现

chenshuhong commented 5 years ago
function objectFactory() {
    var obj = new Object(),
    Constructor = [].shift.call(arguments);
    obj.__proto__ = Constructor.prototype;
    var ret = Constructor.apply(obj, arguments);
    return typeof ret === 'object' ? ret : obj;
};
chenshuhong commented 5 years ago

1.首先创建一个空的对象,空对象的proto属性指向构造函数的原型对象 2.把上面创建的空对象赋值构造函数内部的this,用构造函数内部的方法修改空对象 3.如果构造函数返回一个非基本类型的值,则返回这个值,否则上面创建的对象

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;
}