2015-01-06 2 views
0

Я изучаю объекты JavaScript и задаю один из вопросов относительно кода ниже: объект «cashRegister» имеет только один метод «add()». Затем вне объекта есть другой метод «scan()». Как возможно в конце кода вызывать «cashRegister.scan()», если метод «scan» не относится к объекту «cachRegister»? Это потому, что «scan()» использует метод «add()», который принадлежит «cashRegister», и это использование делает «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

не заметил этого. какой позор –

ответ

1

В коде метод scan фактически внутри cashRegister объекта.

1

метод сканирования относится к кассовому аппарату. Вот код reformated немного, так что вы можете увидеть:

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 и, как это метод объекта «cashRegister», мы можем ссылаться как " cashRegister.scan()». В противном случае это приведет к ошибке. И в данном коде ошибка будет вызвана вызовом метода this.add(), также если метод scan() будет находиться вне объекта cashRegister.

Смежные вопросы