Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.09.2013, 19:37
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Классы js...
Доброго времени суток!

Почему плохо говорят про зайцев, прототипное наследование? Типо в js нет классов... Да но только на уровне языка, а так они легко эмулируются, следовательно классы есть, результат то на выходе один.

Тем более в экма 6. Я понимаю что это все та же цепочка прототипов, эмулирующая классы, но синтаксис нормальный, что еще нужно???

Мне кажется или тут вопрос скорее философский?
__________________
Научу себя плохому
Ответить с цитированием
  #2 (permalink)  
Старый 03.09.2013, 20:11
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Просто для многих главным признаком наличия классов в языке является наличие ключевого слова class А вообще полезно задать себе вопрос: "а что есть класс?", и выянится, что в JavaScript есть классы, просто их реализация немного отличается от реализации скажем в Java. Как раз для таких людей и добавили в следующем стандарте новую "сахарную" обёртку. Лично я использую слово "класс" в отношении JS и ещё ни разу не встречал человека, который бы не понял, что я имею ввиду, но зато встречал много тех, кто на макросе начинал кричать: "в JS нет классов, нуб!".
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 04.09.2013, 00:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Если Винни Пух сказал, что это мед, значит это мед
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 04.09.2013, 01:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от l-liava-l
но синтаксис нормальный, что еще нужно???
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS, обращение к методам родительского лкасса, а также множественное наследование. Ну и раз есть классы, то может завалялись и интерфейсы? Штука весьма полезная в сложных приложениях.
Ответить с цитированием
  #5 (permalink)  
Старый 04.09.2013, 10:23
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от danik.js Посмотреть сообщение
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS, обращение к методам родительского лкасса, а также множественное наследование. Ну и раз есть классы, то может завалялись и интерфейсы? Штука весьма полезная в сложных приложениях.
Для декларации статических методов добавили модификатор static. Обращение к родительской реализации метода через ключевое слово "super". Множественное наследование возможно будет с использованием объекта Proxy: вешаем обработчик на событие "не найдено свойство или метод" и в обработчики переправляем поиск на дополнительную цепь прототипов. На данный момент в ИЕ11 объекта Proxy нет, увы.
__________________
kobezzza
code monkey
Ответить с цитированием
  #6 (permalink)  
Старый 04.09.2013, 11:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от danik.js
Покажи как на нормальном синтаксисе выглядят статические методы "классов" в JS
var __class = function() {
   this.static = 1;
}

new __class().static;
Ответить с цитированием
  #7 (permalink)  
Старый 04.09.2013, 12:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

monolithed,
дык это не статический метод, ты уже создаешь экземпляр класса и получаешь свойство у созданного экземпляра, что уже является не статическим свойством.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 04.09.2013, 12:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 04.09.2013, 12:25
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 04.09.2013 в 12:33.
Ответить с цитированием
  #10 (permalink)  
Старый 04.09.2013, 12:54
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

devote, а как у тебя передаётся контекст вызова родительскому методу при перекрытии в дочернем? Ведь если написать:

this.parent.method.call(this);


То выполнение метода уйдёт в рекурсии при наследовании выше второго уровня: superParent > parent > child и т.д. Или у тебя за ширмой реализации скрыта какая то магия?)
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
Мастер классы по js l-liava-l Оффтопик 5 24.12.2012 17:30
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13