2013-08-12 4 views
1

У меня есть базовый класс, который расширяет Backbone.View. Я хочу иметь возможность вызвать «инициализацию» super после переопределения «initialize» в подклассе. Как я могу выполнить вызов супер расширенного класса в javascript самым надежным и ясным способом?Вызов метода супер в Javascript Магистральный класс

Я видел это (Super in Backbone), есть ли более четкий способ достичь этого, не зная, кто является суперкласс перед рукой?

App.Views.BaseView = Backbone.View.extend({ 
    initialize: function(templateContext){ 
     this.super_called = true; 
    } 
}); 

Для всех моих подходов я хочу воспользоваться уже записанной функцией инициализации.

App.Views.ChildViewWorks = App.Views.extend({}); 
var newView = new App.Views.ChildViewWorks(); 
alert(newView.super_called); // print true 

App.Views.ChildViewDoesNotWork = App.Views.extend({ 
    initialize: function(templateContext){ 
     this.super_called = false; 
     //what line of code can I add here to call the super initialize()? 
    } 
}); 
var newViewWrong = new App.Views.ChildViewDoesNotWork(); 
alert(newViewWrong.super_called); //now equal to false because I have not called the super. 
+0

Можете ли вы представить, как App.Views была определена? – jcbelanger

ответ

2
App.Views.ChildViewDoesNotWork = App.Views.BaseView.extend({ 
    initialize: function(templateContext){ 
     this.super_called = false; 
     App.Views.BaseView.prototype.initialize.call(this); 
    } 
}); 
+0

Окончательный ответ заключается в том, что нет лукавого способа назвать супер без явного знания супер? –

+0

Очевидно, вы можете сохранить его в свойстве наследующего класса в контексте объявления наследования. – Creynders

+0

см. Https://github.com/creynders/demiurge/blob/master/src/demiurge.js#L35 – Creynders

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