2015-12-31 2 views
-1
function player(){ 
    this.hitpoints =100; 
    this.attack = function attack(opponent){ 
     opponent.hitpoints -= 10; 
    } 
} 
var p1 = new player(); 
var p2 = new player(); 

p1.name = "ali"; 
p2.name = "ahmed"; 
p1.attack(p2); 

alert(p2.name+"has"+p2.hitpoints+"left behind"); 

Выход выше кодпередачи аргументов в функции Constructer в JavaScript

Ahmed имеет 90 осталось позади.

Но всякий раз, когда я изменить свой код p1.attack(p2.name; вместо p1.attack(p2); то он будет выводить следующий результат:

Ahmed имеет 100 осталось позади.

Почему этот результат выводится?

Я новичок в Javascript, я ничего не знаю об объектах. Я просто хочу знать, как аргументы должны быть переданы в этой конкретной функции attack().

+0

Пожалуйста, найдите время, чтобы убедиться, что код в вопросе действительно является кодом, который вы используете, и используйте правильный синтаксис в тексте вопроса. Это помогает убедиться, что ваш вопрос ясен. –

+2

Это потому, что вы даете объект методу 'атака'. Когда вы даете ему параметр 'p2.name', вы даете ему строку. – Cyval

+0

На данный момент несколько разных людей отредактировали ваш вопрос, и я совсем не ** ** уверен, что он действительно спрашивает, что вы хотите спросить. Пожалуйста, удалите его и задайте вопрос, обращая внимание на детали. Подробности имеют значение в программировании, а также в вопросах программирования. –

ответ

0

Если вы используете

p1.attack(p2.name) 

тогда код будет пытаться вычитаем 10 из p2.name.hitpoints и оставил p2.hitpoints нетронутыми.

2

Это потому, что вы передаете объект функции. Передача p2.name в качестве параметра не будет работать, поскольку p2.name - свойство с типом данных строки.

Операция затем переходит со следующими параметрами, приведенными:

attack(p2) => p2.hitpoints -= 10 
attack(p2.name) => p2.name.hitpoints -=10, 

, которое не является действительным, поскольку p2.name не является экземпляром игрока.

+0

Точно. Вы пытаетесь передать свойство объекта вместо передачи самого объекта. – Jorrex

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