对象新建属性对原型链的影响

1:

function f(){}:

f.prototype={x:function(){}}
b =new f()
c=new f()
c.x=10
console.log(c.x)

console.log(b.x)


2:

function f(){}
f.prototype={x:1}
b =new f()
c=new f()
c.x=10
console.log(c.x)
console.log(b.x)


3:

function f(){}
f.prototype={x:{a:1}}
b =new f()
c=new f()

c.x['a']=10
console.log(c.x['a'])
console.log(b.x['a'])


4:

function f(){}
f.prototype={x:[1,2,3]}
b =new f()
c=new f()
c.x[1]=10  
console.log(c.x[1])
console.log(b.x[1])

以上的代码中,1,2中的输出是不一样的,他们都遵循了原型链只在取值时起作用的原则,这两种情况中,c.x=10只是在c的对象空间新建了一个属性,而原型中的x并没有被改变,他还是function(){},我们可以通过c.__proto__.x去访问他,但是3,4中的输出是一样的,所以当是数组或对象这种形式的时候,情况就会不一样,但是如果我们定义的是和原型中的数组或者对象同名的变量,则会发生覆盖(比如c.x=10而不是c.x['a']=10),否则不管是取值还是赋值,针对的都是原型中的变量,原因在于x[1]或者x['a']不是合法的变量名,所以无法创建一个变量对原型中的同名变量进行覆盖。所以这时候会影响原型,从而影响链接到原型的所有对象。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值