模拟new的实现

163 阅读1分钟

new

// 每一个类都会有自己的一个原型 prototype // 每一个new 出来的实例 ,都会有一个__proto__,然后通过__proto__就可以找到我们的原型prototype, // 原型prototype上面除了有我们自己写的公共方法say,还会有一个constructor构造函数,而这个constructor函数指向的是我们的Animal类

function mockNew() { // 第一个参数是一个类,第二个参数是 实例上的属性
    // Constructor => animal 
    let Constructor = [].shift.call(arguments); // 删除的是我们arguments上的第一项
    // 剩余的arguments 就是其他的参数

    let obj = {};
    obj.__proto__ = Constructor.prototype; // 继承了原型上的方法
    let r = Constructor.apply(obj, arguments);
    return r instanceof Object ? r : obj;
}

let dog = mockNew(Dog, 'Dog--动物1');
console.log(dog)
console.log(dog.say());