原型链继承-原型替换

原型替换

当给原型对象添加的成员比较多时,用原型替换优化
把原型替换成一个新的对象,在新的对象中添加成员
per.prototype = {//…}
问题:原型替换会造成constructor属性丢失
解决:给新的原型对象手动添加constructor属性即可

  function per(){
        }
        // 实例对象需要的成员, 可以往原型对象中添加
        //但是如下添加方式,写法比较麻烦,per.prototype写法在重复
       // per.prototype.say =function(){
         //   console.log("你好")
       // }
       per.prototype ={
           //需要给新对象原型对象添加constructor属性,指向当前的构造函数
        constructor:per,
        say:function(){
            console.log("你好")
        } 
       }
        var p1 =new per();
        //p1 的原型链:
        //p1 ==> per.prototype(本质上替换后的对象{})==>Object.prototype==>null
        console.log(p1.constructor);//Object 
        //p1沿着原型链最终查找到Object的原型对象上才有constructor属性==>Object
        //原型替换对象身上缺少constructor 原型替换之后找不到constructor 最后找到了Object (是不对的)
        //解决办法:在新的对象当中手动添加constructor:per,
        //p1.say();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值