Comments 33
window[name] = function(){
даже не знаю… сколько уже говорим о пространстве имен.
А если я хочу глобально вызывать Class, вы знаете ещё какой-то способ это сделать?
А если Ваш код захотят использовать, например, в NodeJS? Там же нет объекта window
вы Class и так глобально вызываете, я о том что не нужно глобальное пространство засорят кастомными классами типа Person
если Вы уже упоминали MooTools, то там
и ели по Вашему коду, то return сделать
Class('Person', [], {
если Вы уже упоминали MooTools, то там
var Person = new Class(properties);
и ели по Вашему коду, то return сделать
Если проводить аналогию, например с PHP, то там не надо делать new class. Там классы доступны везде, где они подключаются. Поэтому здесь это сделано умышлено, без namespace. Я не говорю что ни не нужны, я говорю что удобнее было бы писать так, а не new Class(properties);
Как вызывать перекрытый метод базового класса?
Через this.__bases
Допустим у меня есть три класса GrandParent, Parent и Child. Думаю из названий понятна иерархия наследования. Допустим у всех из них есть метод foo. Допустим я хочу вызвать из foo в Child метод foo Parent'а, с прототипам я сделаю так:
В вашем случае, я так понимаю, это будет выглядеть так (если я все правильно понял):
Нужно держать в голове всю цепочку наследования, код перестает быть самодокументируемым. Ко всему этому оверхэд по памяти в вашей реализации. Да и в сущности вы реализовали все те же прототипы, вид сбоку и кривовато.
Parent.prototype.foo.apply(this, arguments);
В вашем случае, я так понимаю, это будет выглядеть так (если я все правильно понял):
this.__bases[1].foo.apply(this, arguments);
Нужно держать в голове всю цепочку наследования, код перестает быть самодокументируемым. Ко всему этому оверхэд по памяти в вашей реализации. Да и в сущности вы реализовали все те же прототипы, вид сбоку и кривовато.
У меня более каверзный вопрос. Как получить перекрытое свойство?
Ну и проверка на
hasOwnProperty
вот в этом кусочке не помешала быfor(var v in c) {
this[v] = c[v];
}
Спасибо исправил, теперь можно точно также через __bases
Поздравляю, вы изобрели примеси.
Вот так вот? Одним махом, взяли и убили всю прелесть прототипов?
Фишка прототипа в том, что все его методы хранятся в ОДНОМ месте, в ОДНОЙ инстанции, и все порожденные объекты пользуются этими методами по ссылкам.
Фишка прототипа в том, что все его методы хранятся в ОДНОМ месте, в ОДНОЙ инстанции, и все порожденные объекты пользуются этими методами по ссылкам.
А теперь вспоминаем оператор instanceof
var s = new Student('Student', 10, []);
s instanceof Student; // => true
s instanceof Person; // => false
Добавлю, что в правильном наследовании s instanceof Person;, должен быть true
var s = new Student('Student', 10, []);
s instanceof Student; // => true
s instanceof Person; // => false
Добавлю, что в правильном наследовании s instanceof Person;, должен быть true
Прототипное наследование (правильно сделанное) поддерживает оператор intanceof. А вы не предоставили альтернативы.
Пусть они там в своих городах на машинах ездиют, а нам и лошадей достаточно
Как хорошо, что уже начинают появляться и развиваться языки вроде CoffeeScript или TypeScript, которые всю эту негуманоидную возню с прототипами перекладывают на компилятор! Глядишь, лет через пять можно будет забыть JS как страшный сон.
Не понимаю я всей это истерии с JS-фобией. Замечательный язык, а его модель наследования вполне жизнеспособная и ее можно очень эффективно применять.
При его модели наследования, каждый пишет подпорку для реализации более удобного способа наследования.
И в каждом монастыре своя подпорка.
Как появился TypeScript — я быстренько перелез на него.
Чего только 1 модули стоят — красота!
Помимо того, что есть компилятор, так ещё и JS получается на удивление хороший. Сэкономил мне уйму времени при указании ошибок при компиляции. И ещё уйму, когда подсказывал параметры свойств виджетов jQuery UI.
И в каждом монастыре своя подпорка.
Как появился TypeScript — я быстренько перелез на него.
Чего только 1 модули стоят — красота!
Помимо того, что есть компилятор, так ещё и JS получается на удивление хороший. Сэкономил мне уйму времени при указании ошибок при компиляции. И ещё уйму, когда подсказывал параметры свойств виджетов jQuery UI.
Называется — неосиляторы. Вопрос, зачем вообще писать на JS, если делать из него подобие Java / турбопаскаль / пхп с помощью вагона разнообразных костылей.
Sign up to leave a comment.
Наследование без Prototype