2015-08-24 2 views
0

Я пытаюсь определить, как можно унаследовать свойства «класса» объектов 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; 
} 

причина, почему я хочу, чтобы реализовать функцию класса, так что я могу установить определенное свойство на новый экземпляр модели каждый раз при вызове этой функции.

ответ

1

Вы можете получить доступ к методу от вашей базы класс с использованием прототипа объекта.

Например, если вы хотите вызвать ваши базовые классы инициализацию методы вы могли бы сделать следующее

Это говорит, наследование действительно работает немного по-другому в JavaScript (это на самом деле не уникально для позвоночника), чтобы как это работает в Java, и вы, вероятно, должны немного прочитать прототип объекта.

+0

спасибо Джеку, да, я больше говорил о том, как наследование «статических»/классных методов может работать в JavaScript. Эти статические методы каким-то образом наследуются на Java, но я не уверен в JS. –

+0

Я не уверен, что вы пытаетесь сделать, но, как я указал в своем ответе, у вас есть доступ к методам родителя в вашем * унаследованном классе */child. Если вы не выполняли/не переопределяли метод с тем же именем, вы могли бы вызвать его в дочернем классе без использования прототипа. – Jack

+0

Я не могу делать то, что хочу, и я тоже не мог это сделать в Java. Хотелось бы, чтобы я хотел использовать метод static/class в BaseModel со всеми экземплярами SubModel. Но проблема в том, что мне нужна ссылка на классы SubModel в статическом методе BaseModel, и это невозможно или просто плохой дизайн. Это трудно объяснить. Но я в этом уверен. Я только что создал фабричный метод, который не зависит от классов модели. Я могу показать вам пример на Java, если вас интересует, почему это не работает. –

Смежные вопросы