new的实现原理是什么?

2019-07-081716次阅读javascript

new的实现原理:

  1. 创建一个空对象,构造函数中的this指向这个空对象
  2. 这个新对象被执行 [[原型]] 连接
  3. 执行构造函数方法,属性和方法被添加到this引用的对象中
  4. 如果构造函数中没有返回其它对象,那么返回this,即创建的这个的新对象,否则,返回构造函数中返回的对象。
function _new(){

    let target = {};//创建的新对象
    
    //第一个参数是构造函数
    
    let [constructor,...args] = [...arguments];
    
    //执行[[原型]]连接;target是constructor的实例
    
    target.__proto__ = constructor.prototype;
    
    //执行构造函数,将属性或方法添加到创建的空对象上
    
    let result = constructor.apply(target,args);
    
    if(result && (typeof (result) == 'object' || typeof (result) == 'function') ){
    
    //如果构造函数执行的结构返回的是一个对象,那么返回这个对象
    
    return result;
    
    }
    
    //如果构造函数返回的不是一个对象,返回创建的新对象
    
    return target;
    
}

这就解释了下方这样的一个延伸面试题,问返回的是字符串'123'还是一个对象:

function Test(name,age){
    this.name = name;
    this.age = age;
    return '123';
}

const obj = new  Test('xinran001',10);
console.log(obj);//{age:10,name:'xinran001'}

只要显示return返回的不是对象类型(object、function),则返回创建的新对象。

 

上一篇: JSONP的原理是什么?  下一篇: 如何正确判断js中this的指向?  

new的实现原理是什么?相关文章