【发布时间】:2018-09-19 04:57:48
【问题描述】:
我正在尝试使用 ES6 类语法在 JavaScript 中实现装饰器模式。这是我的方法:
class Dish{
constructor(){}
getPrice(){}
getDes(){}
}
class Steak extends Dish{
constructor(){
super();
}
getPrice(){
return 13;
}
getDes(){
return "Steak";
}
}
class SideDish extends Dish{
constructor(dish){
super();
this.dish = dish;
}
getPrice(){
return super.getPrice();
}
getDes(){
return super.getDes();
}
}
class Pommes extends SideDish{
constructor(dish){
super(dish);
}
getPrice(){
return super.getPrice() +5;
}
getDes(){
return super.getDes() + " Pommes";
}
}
当我打电话时
var dish = new Pommes(new Steak());
dish.getPrice();
我得到的结果是 NaN,但我希望是“18”。我的错在哪里?
【问题讨论】:
-
好吧,你的
SideDish方法(你从Pommes使用super调用)不要return任何东西。 -
getPrice(){ super.getPrice(); }毫无意义。如果除了超级实现之外什么都不做,只需省略方法,直接继承即可。它还在调用Dish.prototype.getPrice,它总是只返回undefined- 没有帮助。 -
我很确定
SideDish存在问题。如果我尝试var side_dish = new SideDish(new Steak()); side_dish.getPrice();我得到undefined(这是在添加提到的缺失返回之后)。所以这可以解释NaN,因为undefined + 5会导致NaN,但我不知道为什么SideDish::getPrice返回未定义而不是超级(可能是因为它是从Dish而不是@调用它987654338@?)
标签: javascript decorator es6-class