Показать сообщение отдельно
  #3 (permalink)  
Старый 29.12.2014, 10:41
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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()
    ]
}

Наследование, как можно было заметить, ни в том, ни в другом случае не нужно.

Последний раз редактировалось Erolast, 29.12.2014 в 11:13.
Ответить с цитированием