You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript调用数组内类实例方法提示is not a function的问题排查

问题根源

你在类构造函数中声明的实例属性this.powerOn、this.powerOff等名称和类原型上定义的同名方法冲突,JavaScript中实例属性的优先级高于原型方法,你给同名属性赋值为字符串后,原型上的方法就被覆盖了,所以调用时会提示powerOn is not a function。

解决方案

重命名所有构造函数中和方法同名的属性即可,比如把接口地址类的属性统一加Url后缀:

  1. 调整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;
  1. 同步修改MediaPlayer类的构造函数属性名、方法内的属性引用即可。

内容的提问来源于stack exchange,提问作者jjp2k00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 02:15:02