но с другой стороны, в моей реализации конструктор ExtClass должен быть вызван для записи родительских классов и их методов, решение требует напильника, но я не JS-ник, чтоб сильно заморачиваться
вообще, я дышу ровно, но есть вероятность наложений, если править прототипы базовых объектов, к примеру, я использую библиотеку mootools.js и superlibrary.js (все совпадения имен случайны )), если мы на прототип Array навешиваем indexOf, то в mootols, к примеру, если элемент не найден, возвращается -1, а в superlibrary -2 (а -1 зарезервирован для другого послания).
Так вот, если добавлять в прототип через проверку на существование метода indexOf, то тут зависит от того, какая библиотека подключена первой, а если без проверки, то какая последней, в любом из этих случаев другая библиотека перестанет функционировать корректно
по-поводу mootools.js, проверил, там нет некоторых побочных артефактов, присущих ajaxoop.js
по-моему, я его «сбрил» за схожесть синтаксиса наследования с ajaxoop.js, который «правил» свойство всех объектов родительского класса при измении свойства объекта наследуемого класса.
mootools тоже смотрел, не очень он мне нравится, что-то было с ним не так, уже не вспомню, я месяца 3 назад это наваял. Кстати, не заметил там возможности вызова родительского метода в классе-наследнике.
дает ту же ошибку, в принципе ожидаемо:
Error: Parent1.message is undefined
К тому же, вроде ничего подобного я не встречал, может надо было в «Ненормальное программирование»?
Так вот, если добавлять в прототип через проверку на существование метода indexOf, то тут зависит от того, какая библиотека подключена первой, а если без проверки, то какая последней, в любом из этих случаев другая библиотека перестанет функционировать корректно
причем, имеем преимущество в том, что обращаться из люого метода потомка можно к любому методу любого родителя
this.message = function() {
return 'Parent1::message';
};
};
function Parent2() {
this.message = function() {
return 'Parent2::message';
};
};
function Child12() {
Parent1.call(this);
Parent2.call(this);
this.message = function() {
var message = Parent1.message.call(this) + "\n";
message += Parent2.message.call(this) + "\n";
message += 'Child12::message'
return message;
};
};
var test = new Child12();
alert(test.message());
>> Первый — без обёрток:
Error: Parent1.message is undefined
по-моему, я его «сбрил» за схожесть синтаксиса наследования с ajaxoop.js, который «правил» свойство всех объектов родительского класса при измении свойства объекта наследуемого класса.
эммм… тем, что мой код работает ;)
>> Или
habrahabr.ru/blogs/javascript/128000/#comment_4227627
на деле не использовал его, просто пример привел, что возможно + все методы всех родителей доступны