Я пытаюсь создать надежный способ определения классов «на лету», но я боюсь добавлять ненужные накладные расходы для всего процесса.Функция для создания класса
Вот мой код создания:
function Class(cons,proto) {
var keys = Object.keys(cons);
function _class() {
var i = keys.length;
while(i--) {
this[ keys[i] ] = arguments[i] || cons[keys[i]];
}
}
if(proto) {
var f;
for (f in proto) {
_class.prototype[f] = proto[ f ];
}
}
return _class
}
А вот как я хочу использовать его
var car = Class({
"name": "A car",
"power": 900
},
{
"honk": function() { alert("honk!") }
});
var bmw = new car("BMW", 500);
bmw.honk(); // -> honk!
console.log(bmw.name, bmw.power); // -> BMW 500
var generic = new car();
generic.honk = function() { alert("custom honk") };
generic.honk(); // -> custom honk!
alert(bmw.honk === car.prototype.honk); // -> true
alert(generic.honk === car.prototype.honk); // -> false
console.log(generic.name, generic.power); // -> A car 900
Могу ли я делать что-нибудь ненужное? Есть ли у вас предложения по улучшению? Пожалуйста, сообщите ваше мнение
В javascript нет классов, поэтому в некотором смысле это всегда на лету. Есть так много способов, которые люди придумали для наследования, и все это сводится к тому, чтобы просто выбрать то, что вам нужно для данной задачи. Это действительно зависит от того, что будет 1. упростить остальную часть вашего кода. 2. Эффективно работать. В основном, это зависит от остальной части кода – Jodes