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

JS调用同文件textSize方法报is not a function错误

错误根因

这个报错是典型的this指向错误:
你在Array.map()中传入了普通function形式的回调函数,这类函数运行时会绑定自己的this上下文,不会继承外层getYTickNumberWidth方法的this,所以回调里的this根本不是你挂载textSize方法的对象,自然找不到textSize函数。
至于直接写textSize调用报未定义,是因为textSize不是全局作用域下的独立函数,是和getYTickNumberWidth一起挂载在同一个外层对象(类实例/配置对象)上的方法,脱离对象直接调用当然找不到定义。

修复方法

任选一种即可解决:

  • 方法1:利用map方法的第二个参数指定回调的this指向,数组原生map和d3的map实现都支持这个参数:
return d3.max(dataValues.map(
    function(d) {
        let size = this.textSize(tickLabelFormat(d));
        return size.width;
    }, this // 新增该行,把外层的this传入回调作为执行上下文
));
  • 方法2:把回调改成箭头函数,箭头函数不会生成独立的执行上下文,会直接继承外层作用域的this指向:
return d3.max(dataValues.map(
    (d) => { // 替换原有的function(d)为箭头函数
        let size = this.textSize(tickLabelFormat(d));
        return size.width;
    }
));
  • 方法3:在外层方法中提前缓存this引用,回调内使用缓存的引用调用方法:
getYTickNumberWidth(dataValues, tickLabelFormat) {
    const _this = this; // 提前缓存外层this
    return d3.max(dataValues.map(
        function(d) {
            let size = _this.textSize(tickLabelFormat(d)); // 用缓存的_this调用方法
            return size.width;
        }
    ));
},

注意:你代码里的console.log(this.textSize())没有传入必填的text参数,等this指向修复后这行也会因为缺参报错,调试完建议删除或者补全入参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:18:15