我有一个与在我的原型构造函数中使用if语句有关的问题。
我想做什么:
代码 **不工作
function Item(name, price){
this.name = name;
this.price = price;
}
Item.prototype.calculatePrice = function() {
if (this.name === 'fruit') {
this.price = this.price * 0.95
} else {
this.price = this.price;
}
}
var ball = new Item('soccer ball', 15);
ball.calculatePrice();
// Expected results: 15
var fruit = new Item('fruit', 10);
fruit.calculatePrice();
// Expected results: 9.5
但是我的错误是我写if语句的方式。在没有给我解决方案的情况下,请你指点我犯错误的地方?谢谢。
答案 0 :(得分:1)
您没有描述您的代码的期望和实际结果。但有一点我想到的是,您忘记在computePrice方法中返回this.price
,因此结果为undefined
而不是价格。即使使用当前版本,您也可以获得结果,但是您必须通过检查实例的price属性来明确地执行此操作,例如。 fruit.price
。并且每次calculatePrice方法调用时价格也会发生变化。而是将this.price
分配给局部变量,对该变量进行计算并将其返回。
答案 1 :(得分:0)
问题在于,如果您反复调用该方法,价格将继续下降(对于水果)。
else
子句也没有做任何事情:你指定一个已经分配的值。
不是将计算结果存回this.price
,而是将返回作为函数结果。那样this.price
保持不变(没有意外的副作用),并且可以由对象的用户控制。然后该方法只返回结果:
var result = fruit.calculatePrice();
现在fruit.price
仍然是原来的10,但result
将是9.5
或者,您可以让函数将结果存储为对象属性,但最好是另一个属性(例如this.calculatedPrice
)。
注意:根据要求,未提供实际的解决方案代码。如果您需要更多,请告诉我。
答案 2 :(得分:0)
更新:工作代码:
function Item(name, price){
this.name = name;
this.price = price;
}
Item.prototype.calculatePrice = function() {
if (this.name === 'fruit') {
return 0.95 * this.price;
} else {
return this.price;
}
}
var ball = new Item('soccer ball', 15);
ball.calculatePrice();
// => 15
var fruit = new Item('fruit', 10);
fruit.calculatePrice();
// => 9.5