能否在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
相关产品推荐
相关产品推荐

