Конструктор объектов и работа с ними
Вопрос. Есть конструктор 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, время: 13:11. |