Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как работает функция Class (https://javascript.ru/forum/offtopic/33909-kak-rabotaet-funkciya-class.html)

godofjavascript 14.12.2012 23:00

Цитата:

Сообщение от melky
навскидку, instanceof не работает ...

работает (кэп подсказывает что это не функция класс, это примерно то как она устроенна, на функции класс все работает и еще куча ништяков, как мы помним, тут я пытался опсиать лишь логику того как она работает, не затрагивая то как там протектед от приват отличаются и прочее)

godofjavascript 15.12.2012 00:05

и ДА, на каждый перекрываемый метод родительского класса в дочернем создает замыкание. И я думаю потеря в 50 миллисекунд на 1000000 операций того стоит.

все ради того чтобы писать не (как в педыдущих версиях)

patent.run.apply(this, arguments);

а

this.super();



п.с. к слову, в оригинальной версии работает даже
new Cat instanceof Cat // true
new Cat instanceof Animal // true
new Cat instanceof Class // true

и
Class.prototype.q = 11
new Cat().q // 11


и все это с поддержкой ie 6

Shaci 15.12.2012 00:41

Цитата:

Сообщение от godofjavascript
и все это с поддержкой ie 6

когда ж этот браузер сдохнет..

godofjavascript 15.12.2012 09:23

если бы не ишаки то добавил бы фиксированный this и define property

а вообще официально можно поддерживать только текущую и предыдущую версии чего-либо.. то есть щас ишак 10 и 9, 8 уже можно больше не пддерживать и посылать всех нахуй.

godofjavascript 15.12.2012 09:28

Теперь собственно зачем это нужно, за тем чтобы конструктор был таким же методом как и все остальные и тоже наследовался.

Иначе мы не сможем сделать нормальное наследование. Например:
function Button (){
    document.createElement('div')
}

function Toggle (){
   /* бла бла бла преключатель на основе кнопки */ 
}
Toggle.prototype = new Button;


ТАК ШТОЛЕ НАМ НАСЛЕДОВАНИЕ ДЕЛАТЬ? Вот и я про то, конструктор должен быть методом (в нашем случае это протектед метод __construct который наследуется и скрытый)


А так же затем чтобы можно было удобно обращаться к перекрытым родительским методам через this.super().

а не так :

this.run = function(){
  Object.getPrototypeOf(this).run.apply(this,arguments);
  alert('...and jump')
}


все, больше у этой байды назначений нет. если вы не пользуете наследование в своих проектах то Class и нахуй не нужна.

И вообще, для тех кто не понимает что такое ооп и что такое классы вообще, чтобы вы не плакались, замените название функции на Type.

DjDiablo 15.12.2012 12:20

Цитата:

а вообще официально можно поддерживать только текущую и предыдущую версии чего-либо.. то есть щас ишак 10 и 9, 8 уже можно больше не пддерживать и посылать всех нахуй.
это только в астральном вакууме можно посылать всех.

В реальной жизни у программы есть назначение, у программы есть заказчик, и у программы есть пользователи. Требования к ПО определяет не программист, а заказчик.

заказчиков требующих поддержку олдскульных браузеров можно поделить на две категории.

Просто тупые - ты гордо говоришь что сделал, клиент идёт домой запускает XP, запускает 7й ишак с кучей плагинов на пол экрана :) и видит что ничего не работает. В истерике звонит тебе и начинает орать что он заплатил деньги, что вы долго долго делали и всё равно ни хуя не работает. Короче вы уроды, недоучки и дебилы в его глазах, и вообще он хочет обратно свои деньги и никогда работать с вами он больше не будет.

умные - у них есть статистика по браузерам посетителей их ресурса. И тут выясняется что допустим целевая аудитория врачи, основная ось на рабочих пк у них XP, установка программ обычно запрещена администратором компов. Получается что часть бедолаг сидит тна 7мом а то и 6м ишаке. Заказчик видит эту статистику, звонин вам и обьясняет "дык ребят я всё понимаю но я немогу позволить себе пожертвовать 20% посетителей", и ты либо отказываешся от заказа либо выполняешь его требования.

Требования определяет заказчик а ни программист. Иногда требования некорректны иногда противоречивы или невыполнимы(прим HTML5 CSS3 анимацию на 6ie). Но с требованиями нужно и можно работать, существует даже такое направление как инженерия требований, существует специальность инженер по требованиям (редко- редко). А вот посылать, просто потому что не хочется что-то делать можно только в фантазиях.

melky 15.12.2012 13:07

Цитата:

Сообщение от godofjavascript
все ради того чтобы писать не (как в педыдущих версиях)

Цитата:

Сообщение от godofjavascript
если вы не пользуете наследование в своих проектах то Class и нахуй не нужна.

имхо JS функциональный язык с добавлением (чуть-чуть) прототипного ООП - это стало ясно уже после JS 1.6 (reduce, maps, filters <-- Array); для текущей версии это уже очевидно - ребята даже синтаксис функций упрощают, дабы они стали похожими на лямбды:
// JS 1.5
function () { return false; } 
// JS не помню какой версии
function () false;


тем более, что на хабре начали всё чаще публиковать статьи про ФП - почему бы не перейти? кода действительно намного меньше получается.

Цитата:

Сообщение от DjDiablo
прим HTML5 CSS3 анимацию на 6ie

я ещё ломаю голову :)

fadeIn и fadeOut программируется на фильтрах - я хочу сказать, что это то же самое, что и css3 анимация.

там ещё куча фильтров, но они анимируют изменение состояния элемента, а не изменение значений свойств - так, например, в IE можно анимировать смену innerHTML, а в других браузерах придётся выёпываться, и наоборот.

tenshi 15.12.2012 13:56

какой нафиг функциональный язык если "функции" в js являются объектами?

godofjavascript 15.12.2012 14:25

Цитата:

Сообщение от DjDiablo
тут выясняется что допустим целевая аудитория врачи, основная ось на рабочих пк у них XP, установка программ обычно запрещена администратором компов.

то есть если у меня магазин чашек, и какие то пидоры сидят на работе (за место того чтобы работать) с ишаков и хотят заказать чашку ядолжен доплачивать верстальщикам чтобы они и ишаки поддерживали?? Ни че! Придут домой, запустят семерку и хром, и закажут чашку! Самоуважение иметь надо а не быт шлюхами.

Цитата:

Сообщение от DjDiablo
А вот посылать, просто потому что не хочется что-то делать можно только в фантазиях.

ну если ты шлюха, то да), то тебе придется делать все за что заплатят. даже то что ты не хочешь делать)... Ты таки прав. большинство людей шлюхи) в капитализме живем.

Цитата:

Сообщение от tenshi
какой нафиг функциональный язык если "функции" в js являются объектами?

забаньте его уже а

Цитата:

Сообщение от melky
анимировать смену innerHTML

даа, в ишаке много че напридумывали, только вот они забивали хуй на стандарты, по тому он и говно, если бы там была поддержка И стандартов И их нововведений, тогда это был бы хром)

dmitriymar 15.12.2012 15:26

Цитата:

Сообщение от godofjavascript
в чем проблема, меня просили написать как она работает - я пишу

кто и когда, если не секрет? может приснилось ? а?:)


Часовой пояс GMT +3, время: 06:36.