js-分析new操作符的行为,并模拟

如下代码

function Student(name) {
  this.name=name;
}
let stu = new Student('kk');

分析得到的stu,发现执行new之后会得到一个对象;
通过this.name为对象分配了name属性;
stu的原型链__proto__指向了Student的prototype;
综上,new操作符会做以下事情

  • 执行函数,并生成一个对象
  • 在函数作用域内,将this指向生成的对象
  • 并为对象的作用域链指向函数的原型

由此模拟new操作符:

function newOp(ctor) {
    //如果传入参数不是一个构造函数则抛出
    if(!ctor instanceof Function) {    
        throw new Error('error ctor')
    }
    //生成一个原型链指向ctor.prototype的对象
    let obj = Object.create(ctor.prototype)
    //得到除stor以外的其他参数
    args = [].slice.call(arguments,1)
    //通过apply将this指向新生成的对象并执行ctor
    ctor.apply(obj,args)
    //返回生成的对象
    return obj
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容