2011-01-14 85 views
0

我正在使用MooTools類系統,我希望能夠訪問任何特定類的靜態成員,而無需知道完整的繼承鏈。舉例來說,如果我有一個ChildClass延伸BaseClassMooTools中靜態成員的繼承

BaseClass.foo = function() { /*...*/ }

我希望能夠調用ChildClass.foo()

爲此,我想修改MooTools的Class方法如下:

function Class(params) 
    // ... 
    // var newClass = ... 

    var parentClass = params.Extends; 
    if (parentClass) { 
     newClass.__proto__ = parentClass; 
    } 

    // ... 
} 

這將設置每類對象的原型鏈指向它的父類。

如果更高級別的靜態成員隱藏在更多派生類中,那就這樣吧。

儘管使用了已棄用的__proto__,我在正確的軌道上嗎?有沒有人看到任何明顯的問題?

回答

1

您可以隨時擴展擴展賦值函數:

(function(){ 

    var original = Class.Mutators.Extends; 

    Class.Mutators.Extends = function(parent) { 
     original.call(this, parent); 

     var members = {}; 
     for (var key in parent) { 
      if (parent.hasOwnProperty(key) && !this.hasOwnProperty(key)) { 
       members[key] = parent[key]; 
      } 
     } 
     this.extend(members); 
    }; 

}()); 

你應該看看Mark Obcena's book