krutoy, 1) пощади JS, не учи новичков говнокоду, 2) сраным комитетчикам, наверное, виднее? Никто у тебя гибкости не отнимает, setPrototypeOf полностью аналогичен сеттеру __proto__.
ssadfaf, учи сразу ES6 и ES7. Это пока что неутвержденные (но близящиеся к тому) версии стандарта JS, сейчас ими можно пользоваться
через компиляцию. В ES6 задача решается элементарно встроенными средствами:
class Character {
constructor(data) {
Object.assign(this, {//Default properties
hp: 1000,
energy: 500,
speed: 100
}, data);
}
}
function loadCharacters() {
return [
new Character({hp: 10000, energy: 10000, speed: 10}),
new Character({hp: 100}),
new Character()
];
}
console.log(loadCharacters());
Для решения на ES5- тебе нужна функция extend из, например, underscore или jQuery, выглядеть это будет так (в примере применен underscore):
function Character(data) {
_.extend(this, {//Default properties
hp: 1000,
energy: 500,
speed: 100
}, data);
}
function loadCharacters() {
return [
new Character({hp: 10000, energy: 10000, speed: 10}),
new Character({hp: 100}),
new Character()
]
}
Наследование, как можно было заметить, ни в том, ни в другом случае не нужно.