原型函数调用同原型函数时,如何正确访问this对象?
问题原因
你在nope函数里直接调用Messages.prototype.works()时,works内部的this指向的是**Messages.prototype这个原型对象**,而非你创建的dbg实例。原型对象上不存在elem属性,所以会提示this.elem为undefined。
而直接调用dbg.works()能正常运行,是因为通过实例调用原型方法时,JS会自动把方法内的this绑定到当前实例上。
解决办法
有两种简单的修复方式:
方式一:通过当前实例的this调用works
直接在nope里用this.works(),此时this指向dbg实例,调用后works内的this也会自动绑定到实例:
Messages.prototype['nope'] = function(...args) { this.works('noper', ...args); }
方式二:用call手动绑定this
如果一定要直接调用原型上的works方法,可以用call把this强制绑定为当前实例:
Messages.prototype['nope'] = function(...args) { Messages.prototype.works.call(this, 'noper', ...args); }
验证效果
修改后重新运行代码,dbg.nope('not', 'this')就能正常把内容追加到#Messages元素中。
内容的提问来源于stack exchange,提问作者kdubs
相关产品推荐
相关产品推荐

