В чем разница в этих двух примерах, почему рекомендуют как во 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. (без учёта самой игры) Очевидно, что второй код будет занимать меньше строк.
Комментариев нет:
Отправить комментарий