Классы js...
Доброго времени суток!
Почему плохо говорят про зайцев, прототипное наследование? Типо в js нет классов... Да но только на уровне языка, а так они легко эмулируются, следовательно классы есть, результат то на выходе один. Тем более в экма 6. Я понимаю что это все та же цепочка прототипов, эмулирующая классы, но синтаксис нормальный, что еще нужно??? Мне кажется или тут вопрос скорее философский?:) |
Просто для многих главным признаком наличия классов в языке является наличие ключевого слова class :) А вообще полезно задать себе вопрос: "а что есть класс?", и выянится, что в JavaScript есть классы, просто их реализация немного отличается от реализации скажем в Java. Как раз для таких людей и добавили в следующем стандарте новую "сахарную" обёртку. Лично я использую слово "класс" в отношении JS и ещё ни разу не встречал человека, который бы не понял, что я имею ввиду, но зато встречал много тех, кто на макросе начинал кричать: "в JS нет классов, нуб!".
|
Если Винни Пух сказал, что это мед, значит это мед :)
|
Цитата:
|
Цитата:
|
Цитата:
var __class = function() { this.static = 1; } new __class().static; |
monolithed,
дык это не статический метод, ты уже создаешь экземпляр класса и получаешь свойство у созданного экземпляра, что уже является не статическим свойством. |
Цитата:
function Foo() { this.bar = 1; } function Bar() { this.bar = 2; // обращение к методам/свойствам родительского класса alert(Object.getPrototypeOf(this).bar); } Bar.prototype = new Foo(); new Bar(); |
Нормальный синтаксис че ;)
<script type="text/javascript" src="https://github.com/devote/jsClasses/raw/master/class.js"></script> <script type="text/javascript"> // выглядят статические методы "классов" в JS var Foo = Class({ static: 1 }, { fooMethod: function() { alert('foo'); } }); alert(Foo.static); // обращение к методам родительского класса var Bar = Class({ method: function() { alert('Я родитель че'); } }); var Baz = Class(Bar, { method: function() { this.parent.method(); alert('Я НЕ родитель че'); } }); new Baz().method(); // а также множественное наследование var Zaz = Class([Foo, Baz], { zazMethod: function() { alert('zaz'); } }); var inst = new Zaz(); inst.fooMethod(); inst.method(); inst.zazMethod(); </script> |
devote, а как у тебя передаётся контекст вызова родительскому методу при перекрытии в дочернем? Ведь если написать:
this.parent.method.call(this); То выполнение метода уйдёт в рекурсии при наследовании выше второго уровня: superParent > parent > child и т.д. Или у тебя за ширмой реализации скрыта какая то магия?) |
Часовой пояс GMT +3, время: 04:42. |