2015-01-10 3 views
0

onRender/onShow/initialize과 같은 메서드를 상속하고 재정의하지 않으려면 prototype.onRender.apply()을 사용할 수 있음을 알고 있습니다. 그러나 매번 그것을 쓰는 대신 상속 할 수있는 더 깨끗한 방법이 있습니까?클래스를 확장 할 때 상속 및 특성/메서드를 재정의하지 않음

둘을 console.log 내가 바로 질문을 가지고 있다고 할 때 new MyView2() ... .show()

var MyView = Marionette.ItemView.extend({ 
    onRender: function() { 
    console.log('MyView onRender'); 
    } 
}); 


var MyView2 = MyView.extend({ 
    onRender: function() { 
    MyView.prototype.onRender.apply(this, arguments); 
    console.log('MyView2 onRender'); 
    } 
}); 

답변

0

아니 그것이 얻는만큼 좋고 사용되는 ES5 alloverthe placeinternally - Backbone 다른 옵션은 __super__ 또는 ES6의 transpile을 사용하는 것입니다.

var MyView2 = MyView.extend({ 
    onRender() { 
    MyView2.__super__.onRender.apply(this, arguments); 
    console.log('MyView2 onRender'); 
    } 
}); 
+0

프로토 타입과 __super__을 이해할 수 없지만, 이것이 답입니다. 감사. –

0

확실하지 인쇄 할 수 있습니다,하지만 당신은 기본 상속 메커니즘을 찾아하는 것 :에,

var MyView = Marionette.ItemView.extend({ 
    onRender: function() { 
    console.log('MyView onRender'); 
    } 
}); 


var MyView2 = MyView.extend({ 
    // MyView2 will inherit onRender from MyView 
}); 

MyView2.prototype.onRender === MyView.prototype.onRender // true 
+0

나는 그것이 내 뜻이 아니라고 생각합니다. 코드에서 MyView2는 MyView의 onRender를 실행합니다. 필요한 것은 MyView2를 실행하는 것입니다. 1) MyView의 onRender, 2) MyView2의 onRender –

관련 문제