JavaScript嵌套函数调用buy方法报未定义错误如何解决?
错误点汇总
- 1 构造函数私有方法未暴露:你在
Portfolio构造函数内部定义的buy、sell都是私有函数,仅能在构造函数内部访问,没有挂载到实例上,外部调用portfolio.buy()自然会报方法未定义。
修正方式:在Portfolio构造函数内添加挂载代码:this.buy = buy; this.sell = sell; - 2
stockHoldings方法逻辑错误:你定义的this.stockHoldings方法里写了return stockHoldings(),但stockHoldings是你声明的Map实例,不是函数,加括号调用会抛出类型错误。
修正方式:去掉调用括号,直接返回Map实例:this.stockHoldings = function() { return stockHoldings; } - 3
generetePortfolio返回值错误:函数最后一行写了return portfolio(),portfolio是new Portfolio()生成的实例对象,不是函数,调用会报错。
修正方式:直接返回实例即可:return portfolio; - 4
myPositions遍历逻辑错误:你直接调用portfolio.stockHoldings.forEach,但stockHoldings是挂载在实例上的方法,需要先执行拿到Map实例才能遍历。
修正方式:改为portfolio.stockHoldings().forEach(...) - 5 依赖未定义风险:代码中使用的
Trade类、以及Trade实例的isBuyOrDrip、isSell方法没有给出实现,如果实际代码中未定义这部分逻辑,运行时也会抛出未定义错误。 - 6 数值类型转换问题:你在
generetePortfolio中把quantity、price都转为了字符串类型传入Trade构造函数,后续做数量计算、价格计算的时候如果没有手动转成数字,会出现字符串拼接、计算结果异常的问题,建议传入前转成Number类型。
内容的提问来源于stack exchange,提问作者serah
相关产品推荐
相关产品推荐

