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

使用apply调用类实例方法时无法读取constructor初始化属性如何解决

问题原因

核心原因是调用apply()时没有指定函数执行的this上下文:

  • 直接执行object.TestFunc()时,JavaScript会默认将方法内的this绑定到所属的object实例上,所以可以正常读取实例属性this.text。
  • Function.prototype.apply()的第一个参数就是用来指定函数运行时的this指向,你没有传入该参数时,严格模式下this会被赋值为undefined,非严格模式下会指向全局对象,你的运行环境属于严格模式,所以访问this.text就抛出了属性读取错误。

解决方法

按需选择以下任意一种方案即可:

  • 方案1:补全apply的this参数
    把object[fname].apply();修改为object[fname].apply(object);即可,如果需要给目标方法传参,把参数数组作为apply的第二个参数传入即可。
  • 方案2:使用call方法(适合参数逐个传入的场景)
    修改为object[fname].call(object, 参数1, 参数2, ...)。
  • 方案3:直接通过动态属性调用(无特殊需求优先选该方案)
    如果有参数可以配合扩展运算符使用,写法更简洁:object[fname](...参数数组)。

修改后的通用Loader方法参考:

Loader(cname, fname, ...args){
    const template = require(`./${cname}.js`);
    const object = new template();
    // 不需要传参就直接写 object[fname].apply(object);
    object[fname].apply(object, args);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:27:05