Классы 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, время: 06:19. |