2015-01-06 32 views
0

我正在學習JavaScript對象,並且有一個關於下面代碼的問題:對象「cashRegister」只有一個方法「add()」。然後,在對象之外還有另一種方法「scan()」。如果「scan」方法不屬於「cachRegister」對象,代碼的末尾如何調用「cashRegister.scan()」?這是因爲「scan()」使用屬於「cashRegister」的「add()」方法,並且該用法使得「scan()」是「cashRegister」的方法還是什麼?Javascript:調用不屬於對象的方法

var cashRegister = { 
total:0, 
add: function(itemCost){ 
    this.total += itemCost; 
}, 
scan: function(item, quantity) { 
    switch (item) { 
    case "A": this.add(0.98 * quantity); break; 
    case "B": this.add(1.23 * quantity); break; 
    case "C": this.add(4.99 * quantity); break; 
    case "D": this.add(0.45 * quantity); break; 
    } 
} 
}; 

// scan each item 4 times 
cashRegister.scan("A", 4); 
cashRegister.scan("B", 2); 
cashRegister.scan("C", 4); 
cashRegister.scan("D", 3); 


//Show the total bill 
console.log('Your bill is '+cashRegister.total); 
+1

'scan'方法出現在對象定義內部,它只在包含'};'的行處結束。 –

+0

http://stackoverflow.com/questions/6657013/how-do-i-reference-an-object-method-in-javascript-from-outside-the-object-throu –

+0

did not; t notice this。多可惜 –

回答

1

在你的代碼中,scan方法實際上是cashRegister對象內。

1

掃描方法屬於cashregister。 下面的代碼重新格式化了一下,所以你可以看到它:

var cashRegister = 
{ 
total:0, 
add: function(itemCost) 
    { 
    this.total += itemCost; 
    }, 
scan: function(item, quantity) 
    { 
    switch (item) 
    { 
    case "A": this.add(0.98 * quantity); break; 
    case "B": this.add(1.23 * quantity); break; 
    case "C": this.add(4.99 * quantity); break; 
    case "D": this.add(0.45 * quantity); break; 
    } 
    } 
}; 

// scan each item 4 times 
cashRegister.scan("A", 4); 
cashRegister.scan("B", 2); 
cashRegister.scan("C", 4); 
cashRegister.scan("D", 3); 


//Show the total bill 
console.log('Your bill is '+cashRegister.total); 
2

在給定的代碼掃描方法實際上是一下現金出納機對象內,因爲這是對象「一下現金出納機」的方法,我們可以調用像「 cashRegister.scan()」。否則,這會給出錯誤。並且在給定的代碼中,如果「scan()」方法將位於cashRegister對象之外,那麼錯誤會在調用「this.add()」方法時出現。