Конструктор объектов и работа с ними
Вопрос. Есть конструктор Tank, который создает объекты с определенными свойствами и методами.
function Tank(name,hp,damage){ this.name = name; this.hp = hp; this.damage = damage; this.move = function() { alert (this.name + ' поехал' ) } var T34 = new Tank('Т-34', 1300, 250); var Tiger = new Tank('Тигр', 2300, 450); alert (T34.name + ' '+ T34.hp + ' '+ T34.damage); T34.move(); не получается реализовать функцию this.attack = function(target){ alert(target.hp); alert('атаковал ' + target); alert('нанесено урона ' + this.damage); идея в том, чтобы создать в конструеторе функцию, которая будет работать для всех объектов танк, где можно указать объект атаки. То есть, чтобы один объект имел доступ к свойству другого объекта и мог их изменять. |
Самовар,
<script> function Tank(name,hp,damage){ this.name = name; this.hp = hp; this.damage = damage; this.move = function() { alert (this.name + ' поехал' ) } } var T34 = new Tank('Т-34', 1300, 250); var Tiger = new Tank('Тигр', 2300, 450); alert (T34.name + ' '+ T34.hp + ' '+ T34.damage); T34.move(); Tank.prototype.attack = function(target){ alert(target.hp); alert(this.name+' атаковал ' + target.name); target.hp -= this.damage; alert('нанесено урона ' + this.damage); alert(target.name + ' живучесть '+target.hp); } T34.attack(Tiger); </script> |
Рони, ббольше спасибо. Что-то знакомое с протатипами, обязательно изучу. Но хотелось бы, что функция атаки была описана в костукторе, чтобы все объекты Танк умели ей пользоваться с момента создания, как например метод
this.move = function() { alert (this.name + ' поехал' ) } создал объект танк, а он уже умеет ездить. Но для атаки нужно изменить парметр другого объекта, созданный этим же конструктором, вот с этим проблема. Если туплю извиняйте, я только начал :-? |
Самовар,
:-? всё что мог смотрите выше. |
Цитата:
Если нужно будет внести изменения в какой-либо метод, то всегда можно создать другой класс, который будет наследоваться от вашего оригинального и изменять только необходимые методы/свойства. |
Нексус, а можно какой-нибудь пример как это, или ссылку на ресурс, если не сложно
|
более менее разобрался. сделал по примеру рони, вроде всё заработало. В конструкторе прототипа совйства, методы отдельно, спасибо за помощь
|
Цитата:
<script> function Tank(name,hp,damage){ this.name = name; this.hp = hp; this.damage = damage; this.move = function() { alert (this.name + ' поехал' ) } this.attack = function(target){ alert(target.hp); alert(this.name+' атаковал ' + target.name); target.hp -= this.damage; alert('нанесено урона ' + this.damage); alert(target.name + ' живучесть '+target.hp); } } var T34 = new Tank('Т-34', 1300, 250); var Tiger = new Tank('Тигр', 2300, 450); alert (T34.name + ' '+ T34.hp + ' '+ T34.damage); T34.move(); T34.attack(Tiger); Tiger.attack(T34); </script> |
Часовой пояс GMT +3, время: 12:30. |