我正试图找到一种简单的方法来从子节点调用父函数。但是,无法像在其他编程语言中那样直接从子实例中调用它。
class ExchangeHandler {
constructor(getMarketsUrl, getMarketDataBaseUrl, interval) {
this.interval = interval;
this.getMarketsUrl = getMarketDataBaseUrl;
this.getMarketDataBaseUrl = getMarketDataBaseUrl;
}
getMarketsUrl() {
return this.getMarketsUrl;
}
getMarketDataBaseUrl() {
return this.getMarketDataBaseUrl;
}
buildQueryUrl(params) {
return querystring.stringify(params);
}
getIntervalParam() {
return config.intervalToExchangeInput[[config.exchange]][[this.interval]];
}
}
class BittrexHandler extends ExchangeHandler {
constructor(interval) {
super("https://bittrex.com/api/v1.1/public/getmarkets",
"https://bittrex.com/Api/v2.0/pub/market/GetTicks",
interval);
}
buildGetMarketTickerUrl(symbol) {
return super.getMarketDataBaseUrl() + "?"
+ super.buildQueryUrl({marketName: this.buildSymbolParam(symbol),
tickInterval: super.getIntervalParam()})
}
buildSymbolParam(symbol) {
return "BTC-" + symbol;
}
}
var bittrexHandler = ExchangeHandlerFactory.getExchangeHandler("bittrex", "hour");
console.log("getMarketsUrl: " + bittrexHandler.getMarketsUrl());
我得到了
TypeError: bittrexHandler.getMarketsUrl is not a function
这不是javascript中的可能吗?非常感谢!
答案 0 :(得分:3)
您不能拥有与getMarketsUrl
相同名称的数据属性和方法。它们占据对象上的相同属性槽。更改其中一个的名称。
当您尝试执行该方法时,解释器首先找到数据属性,因此您无法以正常方式调用该方法。
此外,您不应该使用super
在对象上调用非重写方法。例如,更改此:
buildGetMarketTickerUrl(symbol) {
return super.getMarketDataBaseUrl() + "?"
+ super.buildQueryUrl({marketName: this.buildSymbolParam(symbol),
tickInterval: super.getIntervalParam()})
}
到此:
buildGetMarketTickerUrl(symbol) {
return this.getMarketDataBaseUrl() + "?"
+ this.buildQueryUrl({marketName: this.buildSymbolParam(symbol),
tickInterval: this.getIntervalParam()})
}