Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2018, 09:11
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

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


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

Последний раз редактировалось Самовар, 13.02.2018 в 09:14. Причина: некрасиво
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2018, 09:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Самовар,
<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>
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2018, 12:04
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

Рони, ббольше спасибо. Что-то знакомое с протатипами, обязательно изучу. Но хотелось бы, что функция атаки была описана в костукторе, чтобы все объекты Танк умели ей пользоваться с момента создания, как например метод
this.move = function() {
alert (this.name + ' поехал'  )
}


создал объект танк, а он уже умеет ездить. Но для атаки нужно изменить парметр другого объекта, созданный этим же конструктором, вот с этим проблема. Если туплю извиняйте, я только начал
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2018, 12:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Самовар,
всё что мог смотрите выше.
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2018, 12:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,735

Сообщение от Самовар
Но хотелось бы, что функция атаки была описана в костукторе
Методы лучше объявлять в прототипе, чтобы не хранить в памяти реализацию каждого метода для каждого экземпляра класса.
Если нужно будет внести изменения в какой-либо метод, то всегда можно создать другой класс, который будет наследоваться от вашего оригинального и изменять только необходимые методы/свойства.
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2018, 13:16
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

Нексус, а можно какой-нибудь пример как это, или ссылку на ресурс, если не сложно
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2018, 14:22
Аспирант
Отправить личное сообщение для Самовар Посмотреть профиль Найти все сообщения от Самовар
 
Регистрация: 28.03.2017
Сообщений: 31

более менее разобрался. сделал по примеру рони, вроде всё заработало. В конструкторе прототипа совйства, методы отдельно, спасибо за помощь
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2018, 14:56
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Цитата:
не получается реализовать функцию
Странно... работает
<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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор массива объектов и работа с ними через localStorage pepel266 Общие вопросы Javascript 16 04.11.2015 18:30
Проблема! Добавление элементов с помощью append() и работа с ними Gurchava jQuery 3 14.04.2014 17:09
Создать конструктор массива объектов PashPP Общие вопросы Javascript 1 13.08.2012 02:52
Подгрузка select и работа с ними после! BASSON_XVI jQuery 3 07.01.2011 11:28
удаление объектов и тонкая работа с ними(помогите) digitalbrain Общие вопросы Javascript 4 28.07.2010 21:17