2011-01-14 55 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