03.09.2013, 19:37
|
Профессор
|
|
Регистрация: 14.03.2012
Сообщений: 1,808
|
|
Классы js...
Доброго времени суток!
Почему плохо говорят про зайцев, прототипное наследование? Типо в js нет классов... Да но только на уровне языка, а так они легко эмулируются, следовательно классы есть, результат то на выходе один.
Тем более в экма 6. Я понимаю что это все та же цепочка прототипов, эмулирующая классы, но синтаксис нормальный, что еще нужно???
Мне кажется или тут вопрос скорее философский?
__________________
Научу себя плохому
|
|
03.09.2013, 20:11
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Просто для многих главным признаком наличия классов в языке является наличие ключевого слова class А вообще полезно задать себе вопрос: "а что есть класс?", и выянится, что в JavaScript есть классы, просто их реализация немного отличается от реализации скажем в Java. Как раз для таких людей и добавили в следующем стандарте новую "сахарную" обёртку. Лично я использую слово "класс" в отношении JS и ещё ни разу не встречал человека, который бы не понял, что я имею ввиду, но зато встречал много тех, кто на макросе начинал кричать: "в JS нет классов, нуб!".
|
|
04.09.2013, 00:12
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Если Винни Пух сказал, что это мед, значит это мед
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
04.09.2013, 01:39
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от l-liava-l
|
но синтаксис нормальный, что еще нужно???
|
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS, обращение к методам родительского лкасса, а также множественное наследование. Ну и раз есть классы, то может завалялись и интерфейсы? Штука весьма полезная в сложных приложениях.
|
|
04.09.2013, 10:23
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от danik.js
|
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS, обращение к методам родительского лкасса, а также множественное наследование. Ну и раз есть классы, то может завалялись и интерфейсы? Штука весьма полезная в сложных приложениях.
|
Для декларации статических методов добавили модификатор static. Обращение к родительской реализации метода через ключевое слово "super". Множественное наследование возможно будет с использованием объекта Proxy: вешаем обработчик на событие "не найдено свойство или метод" и в обработчики переправляем поиск на дополнительную цепь прототипов. На данный момент в ИЕ11 объекта Proxy нет, увы.
|
|
04.09.2013, 11:53
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от danik.js
|
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS
|
var __class = function() {
this.static = 1;
}
new __class().static;
|
|
04.09.2013, 12:06
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
monolithed,
дык это не статический метод, ты уже создаешь экземпляр класса и получаешь свойство у созданного экземпляра, что уже является не статическим свойством.
|
|
04.09.2013, 12:09
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от danik.js
|
обращение к методам родительского лкасса
|
function Foo() {
this.bar = 1;
}
function Bar() {
this.bar = 2;
// обращение к методам/свойствам родительского класса
alert(Object.getPrototypeOf(this).bar);
}
Bar.prototype = new Foo();
new Bar();
|
|
04.09.2013, 12:25
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Нормальный синтаксис че
<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, 04.09.2013 в 12:33.
|
|
04.09.2013, 12:54
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
devote, а как у тебя передаётся контекст вызова родительскому методу при перекрытии в дочернем? Ведь если написать:
this.parent.method.call(this);
То выполнение метода уйдёт в рекурсии при наследовании выше второго уровня: superParent > parent > child и т.д. Или у тебя за ширмой реализации скрыта какая то магия?)
|
|
|
|