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

godofjavascript 16.12.2012 11:01

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

Собственно вот как это выглядело без обертки:

// конструктор животного (создает животных)
function Animal () {
   return this.init.apply(this, arguments)
}
// конструктор прототипа животного (создает эталонное животное)
function AnimalPrototype () {
    this.init = function(){};
    this.run = function(){ alert('run') }
}
// создаем эталонное животное как прототип животных 
// конструктор Animal будет инициализировать метод инициализации (init) эталонного животного
Animal.prototype = new AnimalPrototype;



// конструктор котов(создает котов)
function Cat () {
   return this.init.apply(this, arguments)
}
// конструктор прототипа кота(создает эталонного кота)
function CatPrototype(){
    this.run = function(){ CatPrototype.prototype.run.apply(this, arguments);  alert('run') }
}

// указываем что эталонное животное будет эталоном для эталонных котов
CatPrototype.prototype = Animal.prototype;

// создаем эталонного кота как прототип котов 
// конструктор будет инициализировать метод инициализации (init) эталонного кота
Cat.prototype = new CatPrototype;


эталон, прототип, образец - синонимы.

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

вот, а в Class это все делается автоматически)

Tim 16.12.2012 12:09

godofjavascript,
Всё твоё сообщение - копипаста из раздела "учебник". Мог бы просто ссылку дать.

tenshi 16.12.2012 14:39

> почему нет то?
не думаю что компилятор хаскела совсем идиоты писали

> ты так говоришь, будто у нас такой код везде встроен
главное - возможность такого встраивания. из-за этой возможности невозможно применить нужные оптимизации.

tenshi 16.12.2012 14:43

Цитата:

Сообщение от godofjavascript (Сообщение 221584)
РАЗ МОЖНО СДЕЛАТЬ ПОбОЧНОСТЬ то значит не фп, это же бред))

http://ru.wikipedia.org/wiki/%D0%A4%...BD%D0%B8%D0%B5

http://ru.wikipedia.org/wiki/%D0%A4%...%D0%BA%D 0%B0)

приятного чтения

melky 16.12.2012 14:44

Цитата:

Сообщение от tenshi
не думаю что компилятор хаскела совсем идиоты писали

google://"lazy evaluation"

Цитата:

Сообщение от tenshi
главное - возможность такого встраивания. из-за этой возможности невозможно применить нужные оптимизации.

это со стороны компилятора невозможно.

мы говорим о разных вещах - ты о компиляторе JS, я о стиле программирования.

кстати, я немного перепутал Функциональное с Декларативным вообще, извини :))

tenshi 16.12.2012 14:50

Цитата:

Сообщение от melky (Сообщение 221635)
google://"lazy evaluation"

google://"compile time evaluation"

tenshi 16.12.2012 14:52

а, ну программировать "в стиле" фп конечно можно) только это будет всё-равно императивная парадигма :Р

godofjavascript 16.12.2012 16:25

Цитата:

Сообщение от Tim
Всё твоё сообщение - копипаста из раздела "учебник". Мог бы просто ссылку дать.

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

tenshi,
ты мне так и не ответил, каким образом то что в яваскрипте можно функциями делать побочные действия делает тебя ОБЯЗАННЫМ их делать превращая в процедуры? ссылки на википедию мне кинул, только узнал штоле о фп и решил поделиться?

Tim 16.12.2012 16:53

Цитата:

не читал учебник но если там такое есть то мне лестно, значит я крут) ссылку можно? и вообще если ты не пятросян и там такое на самом деле есть, то это очень круто.
Пожуй говна максимус. Что крутого в том чтобы скопипастить пару строк кода? Даже если не копипаст, всё равно эти извращения ни кого не впечатляют. Ты далеко не первый кто пытается имитировать стандартное ООП в JS. Думаешь кто то этого не умеет? Это просто ни кому не нужно. На JS нужно писать как на JS а не городить на нём порт PHP и других языков с классическим ООП.

Ссылку сам ищи если хочешь.

godofjavascript 16.12.2012 20:14

Цитата:

Сообщение от Tim
Пожуй говна максимус.

петушку припекло)) ссылку видно найти не смог, пытается троллировать) лал

l-liava-l 16.12.2012 20:27

Цитата:

имитировать стандартное ООП в JS
максимаксимусу просто скучно, пускай развлекается

http://yandex.ru/yandsearch?text=%2F...28ini& lr=239

Вот тебе ооогромная ссылка.
javascript.ru сайт дискрипшен посмотри, он доказывает что ты был в учебнике

tenshi 16.12.2012 20:28

Цитата:

Сообщение от godofjavascript (Сообщение 221662)
каким образом то что в яваскрипте можно функциями делать побочные действия делает тебя ОБЯЗАННЫМ их делать превращая в процедуры?

никто ничего не обязывает. наличие зависимости от изменчивого состояния делает из функции процедуру. по определениям. ссылки я дал.

tenshi 16.12.2012 20:41

а вообще, раз тут все делятся своими реализациями классов - я допилил свою) https://github.com/nin-jin/PMS/tree/master/jin/class
наследование реализуеся через примеси. ссылка на объект передаётся не через this а через первый параметр метода.

Tim 16.12.2012 22:48

Макаксимус, тема на столько уныла что мне хочется прямо сейчас забыть о её существовании. Чтобы раз, и в следующее мгновение я, не понимая зачем набирал этот текст, закрываю вкладку. Это даже не троллинг. Чисто флуд. По моему ты ещё когда немо был писал про эту функцию. Нет? У меня deja vu какое то.

godofjavascript 17.12.2012 00:06

Цитата:

Сообщение от tenshi
наличие зависимости от изменчивого состояния

приведи пример зависимости от изменьчивого состояния и каким образом это сделает из функции процедуру и по какому такому определению.
Цитата:

Сообщение от tenshi
а вообще, раз тут все делятся своими реализациями классов

ну толсто же, я уже где-то 8 раз говорю что это не реализация ооп из других языков а обертка над прототипаим) вы тред вообще не читаете или просто долбоебы)?

Цитата:

Сообщение от tenshi
наследование реализуеся через примеси.

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

tenshi 17.12.2012 00:46

> приведи пример зависимости от изменьчивого состояния и каким образом это сделает из функции процедуру и по какому такому определению.

уже давно привёл. читай внимательней

> ну толсто же, я уже где-то 8 раз говорю что это не реализация ооп из других языков а обертка над прототипаим) вы тред вообще не читаете или просто долбоебы)?

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

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

нет, все методы делегируются из прототипа

godofjavascript 17.12.2012 02:17

Цитата:

Сообщение от tenshi
не словоблудствуй. класс - это не более чем описание группы объектов - их структуры и жизненного цикла. конкретный способ описания (функция+прототип, прототип с методом инициализации, ещё какой дсл) и поддерживаемые фичи (приватные поля, защищенные поля, контроль интерфейсов, кастинг в другие классы) - это детали

я вобще не понял что ты тут написал и зачем. (уточню что ЧТО ты написал я понял но я понял что это не имеет смысла, ты прокэпил в очередной раз, видимо для тебя эти знания кажутся чем-то "умным" что ты так спешишь с нами поделиться?) хватит кэпить заебал. словоблуд ипучий

Цитата:

Сообщение от tenshi
нет, все методы делегируются из прототипа

ты в прототип штоле примешиваешь?? ты в курсе что примеси и делегирование это ваще разные противоречивые вещи?

tenshi 17.12.2012 08:49

> ты в прототип штоле примешиваешь??
ну не в инстанс же

> ты в курсе что примеси и делегирование это ваще разные противоречивые вещи?

ты просто не умеешь их готовить

godofjavascript 17.12.2012 09:49

Цитата:

Сообщение от tenshi
ты просто не умеешь их готовить

докажи

Цитата:

Сообщение от tenshi
ну не в инстанс же

this.head = new Head;

тоже в прототип прмешаешь?

Timmy,

ссылку на учебник можно получить?


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