new 操作符具体干了什么呢?如何实现?

JavaScript里new操作符具体过程如下:

(1)首先创建了一个新的空对象。

(2)设置原型,将对象的原型设置为函数的 prototype对象。

(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)。

(4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

以下用工厂方法模式模拟new操作符的功能; 

function objectFactory() {
    // 创建了一个新的空对象
    let newObject = null;
    let constructor = Array.prototype.shift.call(arguments);
    let result = null;
    if (typeof constructor !== "function") {
        console.error("type error");
        return;
    }
    // 设置原型,将对象的原型设置为函数的prototype对象。
    newObject = Object.create(constructor.prototype);
    // 让函数的this指向这个对象,并执行构造函数的代码
    result = constructor.apply(newObject, arguments);
    // 判断函数的返回值类型。值类型返回创建的对象,引用类型返回引用的对象。
    let flag = result && (typeof result === 'object' || typeof result === 'function');
    return flag ? result : newObject;
}

 

上一篇:java 类和继承


下一篇:javascript面向对象