用新对象替换prototype属性不会更新以前的实例

我们可能会认为在任何时候完全替换prototype属性,并且所有的实例都将更新,这是不正确的。创建一个实例时,该实例将在实例化时被绑定至‘刚完成的’原型。提供一个新对象作为prototype属性不会更新已创建实例和新原型之间的连接。但是要记住,可以更新或添加最初创建的原型对象,这些值仍连接至第一个实例。如下面一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>用新对象替换prototype属性不会更新以前的实例</title>
</head>
<body>
    <script>
       var Bar=function Bar(){};
       Bar.prototype.x=1;
       var BarInstance=new Bar();
       console.log(BarInstance.x);  //输出1
       //使用新Object()对象覆盖Bar的原型
       Bar.prototype={x:2};
       console.log(BarInstance.x);   //刚刚更新了原型,但还是输出1
       //BarInstance依然引用的是初始化的原型对象
       //再创建Bar()的一个新实例
       var NewBarInstance=new Bar();
       //该实例目前引用的就是新原型对象了(也就是{x:2};)
       console.log(NewBarInstance.x);  //输出2
    </script>
</body>
</html>

运行结果图如下:


这里的重点是,一旦开始创建实例,就不应用一个新对象来替换对象的原型。这样做将导致实例有一个指向不同原型的链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值