Страницы

Поиск по вопросам

пятница, 2 ноября 2018 г.

В чем разница между “с конструктором и без конструктора”

В чем разница в этих двух примерах, почему рекомендуют как во 2 примере. Когда нужно использовать конструктор, а когда можно обойтись просто функцией?
Пример 1:
var player_1 = { name: "robot", hitpoints: 100, attack_power: 10, heal_power: 5 } var player_2 = { name: "human", hitpoints: 200, attack_power: 20, heal_power: 20 }
var game = { attack: function (p1, p2) { p2.hitpoints -= p1.attack_power console.log("after hit " + p2.name + "have " + p2.hitpoints + " hitpoints") }, heal: function (p) { p.hitpoints += p.heal_power console.log(p.name + " was heal and now have " + p.hitpoints + " hitpoints") } }
game.attack(player_1, player_2) game.heal(player_2)
Пример 2:
var game = function(name, hitpoints, attack_power, heal_power) { this.name = name this.hitpoints = hitpoints this.attack_power = attack_power this.heal_power = heal_power } game.prototype.attack = function (opponent) { opponent.hitpoints -= this.attack_power console.log("after hit " + opponent.name + " have " + opponent.hitpoints + " hitpoints") } game.prototype.heal = function () { this.hitpoints += this.heal_power console.log(this.name + " was heal and now have " + this.hitpoints + " hitpoints") }
player_1 = new game("robot", 100, 10, 5) player_2 = new game("human", 200, 20, 20)
player_1.attack(player_2) player_2.heal()


Ответ

Для комментария слишком много, поэтому напишу полноценный ответ.
Дело в том, что первый случай подразумевает, что вы в самой программе сами укажете начальные характеристики. Во втором же их можно считать из файла и как следствие - сама программы будет занимать меньше места. К тому же, если у вас нужно заменить несколько юнитов (по сути, это блок кода в первом случае и вызов конструкотора во втором), то это будет занимать довольно много времени. К тому же можно предусмотреть значения по умолчанию, или, что не особо сложно, даже создать некоторые маски для классов, рас и так далее. Согласитесь, что заменить руками большое количество юнитов в первом случае намного сложнее, чем во втором. К тому же второй случай подразумевает, причём явно, простое добавление новых каких-то параметров для юнитов. Помимо этого во втором случае очень просто будет реализовать взаимодействие между юнитами, соответственно если принимать на вход сами объекты.
Как пример, если добавить, например, два параметра: мана и магическая атака, то в первом случае придётся написать дополнительно 8 строк кода, а во втором 6. Если же юнитов будет не 2, а например, 200, то в первом случае нужно написать дополнительно 1604 строки, а во втором будет всего 212.
В общем случае, пусть юнитов n, пусть видов комманд k, а характеристик юнита - i. Тогда первый код будет занимать в строках: (2+i)*n+4k, а второй: (2+i)+n+4k. (без учёта самой игры) Очевидно, что второй код будет занимать меньше строк.

Комментариев нет:

Отправить комментарий