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

能否在USER.get原型方法中调用ACTION.set方法?原型调用问题

问题分析与解决方案

首先直接给结论:你的原方案不可行,没办法直接通过ACTION.set(data)调用到目标方法,下面具体说原因和修正办法:

核心问题所在

  • ACTION是一个构造函数,你把set方法定义在了它的prototype上,这意味着只有ACTION的实例才能访问到这个方法,直接调用ACTION.set是找不到这个方法的——因为构造函数本身并没有挂载set属性。
  • 另外你代码里的data变量是未定义的,USER.get的回调里只有rs是数据库返回的结果,这里得先明确你要传给ACTION.set的数据来源(比如用rs或者其他参数)。

两种可行的修正方案

方案1:实例化ACTION后调用原型方法

你可以在USER.get的回调里创建一个ACTION的实例,然后调用它的set方法,同时修正数据变量的问题:

const USER = function () {}, ACTION = function () {};

USER.prototype.set = function(data){ db.user.insert(data); };
USER.prototype.get = function(id, callback){ 
  db.get(id, function(rs){ 
    // 创建ACTION实例
    const action = new ACTION();
    // 这里假设用数据库返回的rs作为传入set的数据,你可以根据实际需求替换
    action.set(rs); 
    callback(rs); 
  }); 
};

ACTION.prototype.set = function(data){ db.action.insert(data) }

// 如果后续外部也需要使用ACTION实例,可以一起导出
module.exports = { 
  USER: new USER(),
  ACTION: new ACTION()
}

方案2:把set定义为ACTION的静态方法

如果你不需要ACTION的实例,只是想直接通过构造函数调用set,可以把方法直接挂载到ACTION本身上,而不是它的原型:

const USER = function () {}, ACTION = function () {};

USER.prototype.set = function(data){ db.user.insert(data); };
USER.prototype.get = function(id, callback){ 
  db.get(id, function(rs){ 
    // 直接调用静态方法
    ACTION.set(rs); 
    callback(rs); 
  }); 
};

// 定义静态方法,挂载在ACTION构造函数上
ACTION.set = function(data){ db.action.insert(data) }

module.exports = { USER : new USER() }

总结

只要调整ACTION.set的调用方式(要么实例化后调用原型方法,要么改成静态方法),同时修正未定义的data变量,就能在USER.get里成功调用ACTION.set了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:52:23