Я хочу, чтобы пользователь мог создавать классы из базового класса и других классов, созданных пользователем, через одну функцию, заданную литералом объекта.Наследование javascript с родительской переменной
так что бы список классов:
var allclasses = {};
родительский класс может выглядеть примерно так, все классы имеют этот предок: база = функция() { «базовый» this.name = ; this.varname = 250; } base.prototype = { foo: function() { this.varname + = 50; } } // добавлен ко всем классам allclasses ['base'] = base;
и метод создания новых классов:
function create(childliteral) { ???? }
пример того, как это будет работать, в идеале:
var myclass = create({
parentname: 'base', // a required variable, create will return false if this isn't valid (not in allclasses)
name: 'specialname', // a required variable, create will return false if this is already in allclasses
foo: function() {
this.varname += 100;
// this is the part is what causes the most stress, I want it to call the parents function 'foo'
this.parent.foo();
return this.varname;
}
});
, а затем создать экземпляр класса:
var myobject = new myclass();
или ..
var myobject2 = new allclasses['specialname'];
и, наконец, вызывая
myobject.foo();
console.log(myobject.varname) // prints out 400
myobject.parent.foo();
console.log(myobject.varname) // prints out 450
console.log(myobject.parent.varname) // also prints out 450
console.log(myobject.parent.name) // prints out 'base'
console.log(myobject.parentname) // prints out 'base'
console.log(myobject.name) // prints out 'specialname'
Я получил очень близко к этому, за исключением того, что я не мог цепи более двух объектов.
Покажите нам ваш текущий код, пожалуйста! Обратите внимание, что 'this.parent. ...' потеряет контекст текущего экземпляра, поэтому вам может понадобиться переосмыслить этот шаблон. Также посмотрите на ['Class.js'] (http://stackoverflow.com/a/15052240/1048572), чтобы получить вдохновение :-) – Bergi
Кроме того, вы можете взглянуть на T.J. Crowder's ** [Lineage] (https://code.google.com/p/lineagejs/) **. Но будьте осторожны в использовании слова «класс» здесь; он часто приносит с собой ожидания от других языков, которые нелегко удовлетворяются с помощью наследования на основе прототипов Javascript, а также ограничений от тех, кто не существует в JS. Кроме того, многие люди JS обходятся по этому поводу. :-) –
Вам нужно лучше объяснить параметры, которые вы хотите передать в метод создания – ppoliani