2013-12-15 3 views
0
var cashRegister = { 
    total:0, 

    add: function(itemCost){ 
     total += this.itemCost; 
    }, 

    scan: function(item) { 
     switch (item) { 
     case "eggs": 
      this.add(0.98); 
      break; 

     case "magazine": 
      this.add(4.99); 
      break; 

     } 
     return true; 
    } 
}; 

cashRegister.scan("eggs");  
cashRegister.scan("magazines"); 

console.log('Your bill is '+cashRegister.total); 

выходное представление NAN и общее значение не определено. Я попробовал cashRegister.total и this.total в методе добавления, не повезло. Что не так с кодом выше?Объектная переменная не найдена в javascript

ответ

3

Вы this в неправильном месте. Линия внутри add должен был как этот

this.total += itemCost; 

Когда вы говорите

total += this.itemCost; 
  1. total еще не определена в функции
  2. this.itemCost означает, что вы используете элемент itemCost, который в текущем объекте. Но на самом деле этого нет.
2

Попробуйте этот код:

var cashRegister = { 
    total:0, 

    add: function(itemCost){ 
     this.total += itemCost; 
    }, 

    scan: function(item) { 
     switch (item) { 
     case "eggs": 
      this.add(0.98); 
      break; 

     case "magazine": 
      this.add(4.99); 
      break; 

     } 
     return true; 
    } 
}; 

cashRegister.scan("eggs");  
cashRegister.scan("magazines"); 

console.log('Your bill is '+cashRegister.total); 

Ваша ошибка была в этой линии:

total += this.itemCost; 
2

Изменение add метода:

add: function(itemCost){ 
    this.total += itemCost; // "this" was in the wrong place 
} 

Кроме того, вы никогда не должны использовать число с плавающей точкой для денег - они не точны! Вместо этого используйте целые числа. Не конвертируйте в доллары, пока вам не нужно отобразить сумму в долларах. В противном случае у вас могут быть магические доли центов, которые могут складываться с течением времени.

var magicDollars = 1.10 + 2.20; 
console.log(magicDollars); // 3.3000000000000003 - Not good! Money can't materialize itself. 

var cents = 110 + 220; 
var realDollars = cents/100; 
console.log(realDollars); // 3.3 - Better. No unexpected fractional cents. 
Смежные вопросы