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
Пожуй говна максимус.

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


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