qua*_*ela 3 javascript ecmascript-6 es6-class
我试图找到一种简单的方法来从子函数调用父函数。但是,无法像在其他编程语言中那样真正找到一种从子实例直接调用它的方法。
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());
Run Code Online (Sandbox Code Playgroud)
我得到
TypeError: bittrexHandler.getMarketsUrl is not a function
这在javascript中是不可能的吗?非常感谢!
您不能拥有与getMarketsUrl. 它们在对象上占据相同的属性槽。更改其中之一的名称。
当您尝试执行该方法时,解释器首先查找 data 属性,因此您无法以正常方式调用该方法。
此外,您不应该使用super仅调用对象上的非覆盖方法。例如,改变这个:
buildGetMarketTickerUrl(symbol) {
return super.getMarketDataBaseUrl() + "?"
+ super.buildQueryUrl({marketName: this.buildSymbolParam(symbol),
tickInterval: super.getIntervalParam()})
}
Run Code Online (Sandbox Code Playgroud)
对此:
buildGetMarketTickerUrl(symbol) {
return this.getMarketDataBaseUrl() + "?"
+ this.buildQueryUrl({marketName: this.buildSymbolParam(symbol),
tickInterval: this.getIntervalParam()})
}
Run Code Online (Sandbox Code Playgroud)