如何让JavaScript类实例的方法提取后仍绑定对应实例?
解决方案
要实现需求,核心是让每个实例的info方法成为绑定了自身的函数,同时保证提取后的方法引用与实例上的info完全一致。具体实现如下:
- 创建
Vehicle实例后,对实例的info属性执行绑定操作:
const v = new Vehicle('Toyota', 'Camry', 178); // 仅在该区域编写代码 v.info = v.info.bind(v);
效果验证
- 直接调用实例方法:
v.info()→ 输出该实例的正确信息 - 提取方法后单独调用:
const info = v.info; info(); // 同样输出该实例的正确信息 - 验证引用一致性:
info === v.info→ 返回true
原理说明
- 原
Vehicle类的info是挂载在原型上的普通方法,直接提取调用会丢失正确的this指向; - 通过
bind(v)为当前实例生成一个绑定了自身上下文的新函数,并将这个函数赋值给实例自身的info属性; - 此时实例的
info属性会覆盖原型上的同名方法,后续无论是直接调用还是提取后调用,this都会固定指向该实例,同时提取的变量与实例的info指向同一个函数引用。
内容的提问来源于stack exchange,提问作者Selim Choueiter
相关产品推荐
相关产品推荐

