В этом примере я пытаюсь создать шаблон класса, а затем использовать его для создания базового класса и т. Д. И т. Д.Как я могу исправить этот пример, чтобы он работал после первого или второго подкласса?
Все работает, пока я не доберусь до NewStudent. Я получаю объект типа «объект не является функцией».
var Class = function(options) {
var newClass = function(options) {
$.extend(this, options);
};
if (options) {
$.extend(newClass, options);
}
newClass.prototype = newClass;
newClass.prototype.constructor = newClass;
return newClass;
};
var Person = new Class();
Person.prototype.speak = function() {alert(this.name + ', ' + this.type);}
var Student = new Person({name: 'Student', type: 'Student'});
Student.speak();
var NewStudent = new Student({name: 'NewStudent'});
NewStudent.speak();
Если я изменю:
var newClass = function(options) {
$.extend(this, options);
};
к:
var newClass = function(options) {
$.extend(this, options);
return newClass;
};
Это он выполняет вызов говорить, но имя пустое, и тип неопознанный.
Я использую jquery для метода $ .extend.
Как я могу улучшить это, чтобы он работал? Я пытаюсь сделать что-то похожее на то, как Mootools выполняет свой класс, за исключением того, что я хочу создать свою собственную barebone-версию.
Так вызывая новый на функцию возвращает объект. Я попытаюсь автоматизировать его еще один уровень, чтобы избежать вызова Class.create (если это возможно). Спасибо за вашу помощь! – user1110412
Вы не можете ожидать, что «новый Student()» создаст для вас новый класс и в то же время позволит вам создать новый объект типа «Student». Я не думаю, что вы можете сделать это намного проще, чем то, что я показал. –
Я сделал небольшое изменение, упрощающее его использование. –