2011-01-14 2 views
0

Я использую систему классов MooTools, и я хотел бы иметь доступ к любому статическому члену определенного класса, не зная полной цепочки наследования. Например, если у меня есть ChildClass, расширяющий BaseClass иНаследование статических элементов в MooTools

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.

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