Я пытаюсь определить, как можно унаследовать свойства «класса» объектов Backbone. Свойства класса объясняются здесь: https://taurenmills.wordpress.com/2011/10/08/backbone-js-with-class-properties/Наследование свойств класса в Backbone
Мы можем сделать наследование Backbone, например, так:
var BaseModel = Backbone.Model.extend({
someFunc1: function(){
},
someFunc2: function(){
}
},
{ //class properties below
newInstance: function(attrs,opts_{
var model = new BaseModel(attrs);
model.randomProp = opts.randomProp;
return model;
}
});
var SubModel = BaseModel.extend({
someFunc2: function(){ //overrides someFunc2 in BaseModel
someFunc1(); calls someFunc1 in BaseModel
}
},
{ //class properties below
newInstance: function(attrs,opts){
var model = new SubModel (attrs);
model.randomProp = opts.randomProp;
return model;
}
}
);
мой вопрос: как мы можем наследовать «класс» функции из BaseModel? Я хотел бы, чтобы мои подклассы BaseModel наследовали функцию класса newInstance
.
Но я не думаю, что это возможно. Исходя из Java, это не так просто, как наследовать статические методы, которые относятся к самому подклассу в унаследованном статическом методе, а не в суперклассе.
игнорируя то, что я только что сказал, другими словами, я хотел бы сделать что-то вроде:
newInstance: function(attrs,opts){
var Constr = this.constructor; //*but* the 'this' keyword will not be available in the newInstance function, which is like a static method in Java
var model = new Constr(attrs);
model.randomProp = opts.randomProp;
return model;
}
причина, почему я хочу, чтобы реализовать функцию класса, так что я могу установить определенное свойство на новый экземпляр модели каждый раз при вызове этой функции.
спасибо Джеку, да, я больше говорил о том, как наследование «статических»/классных методов может работать в JavaScript. Эти статические методы каким-то образом наследуются на Java, но я не уверен в JS. –
Я не уверен, что вы пытаетесь сделать, но, как я указал в своем ответе, у вас есть доступ к методам родителя в вашем * унаследованном классе */child. Если вы не выполняли/не переопределяли метод с тем же именем, вы могли бы вызвать его в дочернем классе без использования прототипа. – Jack
Я не могу делать то, что хочу, и я тоже не мог это сделать в Java. Хотелось бы, чтобы я хотел использовать метод static/class в BaseModel со всеми экземплярами SubModel. Но проблема в том, что мне нужна ссылка на классы SubModel в статическом методе BaseModel, и это невозможно или просто плохой дизайн. Это трудно объяснить. Но я в этом уверен. Я только что создал фабричный метод, который не зависит от классов модели. Я могу показать вам пример на Java, если вас интересует, почему это не работает. –