Pull to refresh

Comments 33

window[name] = function(){

даже не знаю… сколько уже говорим о пространстве имен.
А если я хочу глобально вызывать Class, вы знаете ещё какой-то способ это сделать?
А если Ваш код захотят использовать, например, в NodeJS? Там же нет объекта window
вы Class и так глобально вызываете, я о том что не нужно глобальное пространство засорят кастомными классами типа Person
Class('Person', [], {

если Вы уже упоминали MooTools, то там
var Person = new Class(properties);

и ели по Вашему коду, то return сделать
Если проводить аналогию, например с PHP, то там не надо делать new class. Там классы доступны везде, где они подключаются. Поэтому здесь это сделано умышлено, без namespace. Я не говорю что ни не нужны, я говорю что удобнее было бы писать так, а не new Class(properties);
function Class() {
  return new function() {
      this.doAnything = function() {
         //--
      }
  } 
}

var classObj = Class();
classObj.doAnything();  

без new, как Вы и хотели (естественно все упрощено)
Как вызывать перекрытый метод базового класса?
Допустим у меня есть три класса 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
Я имел ввиду
if (с.hasOwnProperty(v)) this[v] = c[v];
а то что сейчас лишено смысла.
И опять двойка. :-)
Имеется ввиду защита от такого:
> var a = { b:'b'};
> for(var i in a) console.log(i);
b
> Object.prototype.c = 'c';
> for(var i in a) console.log(i);
b
c
Вот так вот? Одним махом, взяли и убили всю прелесть прототипов?

Фишка прототипа в том, что все его методы хранятся в ОДНОМ месте, в ОДНОЙ инстанции, и все порожденные объекты пользуются этими методами по ссылкам.
Ну это понятно, но не люблю видимо я их) Хочется простого русского 'class'
Код будет больше памяти кушать. Причем не обоснованно.
Есть такой момент, но ведь это потому что без прототипов =)
А теперь вспоминаем оператор instanceof

var s = new Student('Student', 10, []);

s instanceof Student; // => true
s instanceof Person; // => false

Добавлю, что в правильном наследовании s instanceof Person;, должен быть true
Разве можно сделать instanceof без использования прототипов? Можно написать свою функцию, которая будет проверять это.
Тогда какой смысл от такого лесопеда?
Прототипное наследование (правильно сделанное) поддерживает оператор intanceof. А вы не предоставили альтернативы.
Пусть они там в своих городах на машинах ездиют, а нам и лошадей достаточно
Как хорошо, что уже начинают появляться и развиваться языки вроде CoffeeScript или TypeScript, которые всю эту негуманоидную возню с прототипами перекладывают на компилятор! Глядишь, лет через пять можно будет забыть JS как страшный сон.
Не понимаю я всей это истерии с JS-фобией. Замечательный язык, а его модель наследования вполне жизнеспособная и ее можно очень эффективно применять.
При его модели наследования, каждый пишет подпорку для реализации более удобного способа наследования.
И в каждом монастыре своя подпорка.

Как появился TypeScript — я быстренько перелез на него.
Чего только 1 модули стоят — красота!
Помимо того, что есть компилятор, так ещё и JS получается на удивление хороший. Сэкономил мне уйму времени при указании ошибок при компиляции. И ещё уйму, когда подсказывал параметры свойств виджетов jQuery UI.
UFO landed and left these words here
Называется — неосиляторы. Вопрос, зачем вообще писать на JS, если делать из него подобие Java / турбопаскаль / пхп с помощью вагона разнообразных костылей.
Sign up to leave a comment.

Articles