javaSript中的new关键字做了什么?

      //根据以下代码可以总结出,new关键字做了啥
        // new有改变this指向
        // 创建一个空对象
        // 将创造出来的空对象的原型对象指向构造函数的原型对象(不懂的可以找找
        //原型链还有继承的资料,或者等我下篇推文)

        function Person(name,age){
            this.name = name
            this.age = age
        }
        // Person()
         
        // console.log(window);
        //可见,new有改变this指向,和创建一个空对象的作用
        function _new(...rest){
           let content = {}
           let fn = rest.shift() //弹出数组第一个元素
           content.__proto__ = fn.prototype
           fn.call(content,...rest)
           //改变this指向,
           //call传入多个参数要分开传,
           //apply(借用的对象,【】)参数以数组的形式传入,
           //bind()参数分开传,只起绑定作用不会立即调用
           return content
        }
      
        console.log(  _new(Person,'lisi',22));
        console.log(new Person('小王',11));
        //打印结果看似正常,但是对比之后还存在一个问题,他的对象原型—__proto__所指向的构造函数不是Person()
        //所以要把生成的对象的原型指向构造函数的原型对象content.__proto__ = fn.prototype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值