2010-05-29 79 views
2

在dojo中,不能在派生類中爲同一方法之外的其他方法調用重載的超類方法(對於此類,有this.inherited(),除此之外可以使用class_name.function_name.apply )。這個特性已經不存在了,因爲一些重構,dojo傢伙不會放棄它,因爲他們不相信這樣的好例子。詳情請閱讀this mail thread。這個功能不夠好嗎?爲什麼或者爲什麼不?在Dojo中調用覆蓋方法

回答

0

我認爲這樣的行爲有一個非常有效的用例。

考慮使用javascript對象實現state pattern。您可以簡單地通過維護當前對象中的成員變量以及原型中的所有狀態特定函數來實現。只要不斷改變原型,轉移到不同的狀態。現在,當你想把狀態模式和template method pattern結合起來時,你可以簡單地將狀態函數調用爲super()(就像你在python中的方式一樣)。這很重要,因爲狀態函數可能是模板方法類中的鉤子或抽象函數。如果它們是前者,那麼無論當前超類是哪一個超級類別,你都應該能夠調用這些方法的超類版本。