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

点击触发Uncaught TypeError:无法访问私有字段或方法问题求助

错误原因及解决办法

问题根源

你遇到的错误核心是事件回调的this指向错误。当通过addEventListener注册私有方法#clickEventHandler时,这个方法执行时的this会指向触发点击事件的document.body,而非InteractionsManager的实例。私有字段#putHandler属于InteractionsManager类的实例,当this变成document.body时,自然无法访问这个私有成员,因此抛出"object is not the right class"的错误。

另外补充一个小问题:你代码里this.#eventListener = document.body.addEventListener(...)这行逻辑有误——addEventListener的返回值是undefined,如果之后需要移除事件监听,应该保存绑定好的回调函数引用,而非这个返回值。

两种可行解决方法

  1. 用箭头函数绑定上下文
    在enable方法中,将回调改为箭头函数形式,让this自动继承当前InteractionsManager实例的上下文:

    enable() {
        // 保存绑定后的回调,方便后续移除事件监听(可选)
        const boundHandler = (e) => this.#clickEventHandler(e);
        this.#eventListener = boundHandler;
        document.body.addEventListener("click", boundHandler);
    }
    
  2. 用bind方法显式绑定this
    直接给#clickEventHandler绑定当前实例的this,确保方法执行时指向正确对象:

    enable() {
        const boundHandler = this.#clickEventHandler.bind(this);
        this.#eventListener = boundHandler;
        document.body.addEventListener("click", boundHandler);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:04:55