JavaScript调用数组内类实例方法提示is not a function的问题排查
问题根源
你在类构造函数中声明的实例属性this.powerOn、this.powerOff等名称和类原型上定义的同名方法冲突,JavaScript中实例属性的优先级高于原型方法,你给同名属性赋值为字符串后,原型上的方法就被覆盖了,所以调用时会提示powerOn is not a function。
解决方案
重命名所有构造函数中和方法同名的属性即可,比如把接口地址类的属性统一加Url后缀:
- 调整Roku类的构造函数和方法引用:
const MediaPlayer = require('./MediaPlayer'); class Roku extends MediaPlayer { constructor(ipaddress, port, powerOnDelay, powerOffDelay) { super(); let url = `https://${ipaddress}:${port}` // 重命名属性避免和方法重名 this.powerOnUrl = `${url}/powerOn`; this.powerOffUrl = `${url}/powerOff`; this.upUrl = `${url}/up;` this.downUrl = `${url}/down`; this.leftUrl = `${url}/left`; this.rightUrl = `${url}/right`; this.enterUrl = `${url}/enter`; this.selectUrl = `${url}/select`; this.backUrl = `${url}/back`; this.backspaceUrl = `${url}/backspace`; this.exitUrl = `${url}/exit`; this.guideUrl = `${url}/guide`; this.menuUrl = `${url}/menu`; } powerOn() { super.powerOn(this.powerOnUrl); } powerOff() { super.powerOff(this.powerOffUrl); } } module.exports = Roku;
- 同步修改MediaPlayer类的构造函数属性名、方法内的属性引用即可。
内容的提问来源于stack exchange,提问作者jjp2k00
相关产品推荐
相关产品推荐

