JavaScript中能否使用多个this绑定?对象属性与this取值问题
JavaScript中的this绑定与对象属性问题解析
咱们先从你最困惑的第一个例子说起:
为什么第一个例子输出全是"bad"?
你创建whiteRabbit时写了两次type属性:
let whiteRabbit = {type: "white", speak, type: "bad"};
在JavaScript里,对象中重复的属性键会被后面的完全覆盖。也就是说,这个对象最终只会保留最后一个type: "bad",之前的type: "white"直接被丢弃了。当你调用whiteRabbit.speak()时,this指向这个对象,所以this.type只能拿到"bad",输出自然全是bad啦。
能不能给一个函数绑定多个this?
答案是不行。一个函数在执行时,this的指向是唯一的——它由函数的调用方式决定(这里是作为对象方法调用,this就指向调用它的那个对象)。你没法让同一个函数里的两个this分别指向不同的上下文,更没法通过多个this去获取对象里被覆盖的同名属性,因为那些重复的属性根本没被保留下来。
你修改后的方案为什么能生效?
当你把第二个type改成type2后:
let whiteRabbit2 = {type: "white", speak, type2: "bad"};
这时候对象里有两个独立的属性键type和type2,各自对应"white"和"bad"。在speak函数里分别通过this.type和this.type2访问,自然就能拿到你想要的两个不同值,输出也就符合预期了。
小总结
- 如果需要在对象里存储多个不同的标识,一定要用不同的属性键名,别用重复键,不然前面的属性会被后面的覆盖。
- 一个函数执行时只能有一个
this指向,但只要合理设计对象的属性结构,完全可以实现你想要的多值获取效果。
内容的提问来源于stack exchange,提问作者Richard Rublev
相关产品推荐
相关产品推荐

