Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Небольшая репозитошка (https://javascript.ru/forum/offtopic/31846-nebolshaya-repozitoshka.html)

FINoM 23.09.2012 01:23

Небольшая репозитошка
 
Наконец, руки дошли до слива кое-какого кода в на гитхаб. Так уж сложилось, что более-менее крупные проекты сделаны наполовину, поэтому пришлось слить всего несколько функций, которые накопал на форуме: https://github.com/finom/Functions (в каждой папке описание с js файлом). Английский знаю очень плохо (на уровне "чтоб понимали"), поэтому там может быть куча ошибок (которые с радостью исправлю).

В планах залить в этот репозиторий:
— Простейшую реализацию "классов", без сахара (все реализации, на мой взгляд, жутко перегружены, и нужна простая как пять копеек функция)
— Продолжить бороться и допилить defineProperty для ИЕ8. Возможно, даже, сделаю какое-то подобие наследования.
— Допилить эту хрень: http://javascript.ru/forum/project/2...ak-v-node.html и добавить сахарку. Не знаю, насколько это полезно, поэтому рассматриваю, как "захотелось сделать какую-то неведомую хрень".

FINoM 23.09.2012 19:03

Допилил классы. Самое "тяжелое" по количеству строк там — это поддержка разных аргументов.
Цитата:

Сообщение от Maxmaxmахimus
уже поздно бро, уже поздно)

Разница между нами в том, что я уже активно юзаю это хрень в проекте. А ты — ну сделал и сделал.

B~Vladi 24.09.2012 15:50

Оставьте вы уже животных в покое! Даёшь жизненные примеры!

FINoM 24.09.2012 16:51

У меня всё гораздо проще:
MyClass = Class( Parent, Constructor, prototype );


Вот такая запись:
MyClass = Class( Parent, function MyClass () {
  this.a = 3;
}, {
  method: function() {}
});


Аналогична вот такой:
MyClass = function MyClass () {
  this.a = 3;
}

MyClass.prototype = {
  method: function() {}
}

inherits( MyClass, Parent ); // самое простое наследование, которое можно найти в любом учебнике

Обычное сокращение синтаксиса, без изобретения всяких __construct__ (что это за херня вообще? Зачем эта дикая инкапсуляция?), просто возвращает констркутор.

Всяких super и другой ненужной фигни здесь нет, надо юзать apply и call. Тем более, при множественном наследовании нельзя с уверенностью сказать, где super а где не super.

FINoM 24.09.2012 16:58

Цитата:

Сообщение от Maxmaxmахimus
сразу видно человек не знаком с PHP

И? Мы разве на похапэ здесь кодим?
Цитата:

Сообщение от Maxmaxmахimus
super нужен для доступа к перекрытому методу. и он не фигня, иначе докажи обратное.

Цитата:

Сообщение от Maxmaxmахimus
че за бред?

Включи логику.

B~Vladi 24.09.2012 17:06

Цитата:

Сообщение от Maxmaxmахimus
super нужен для доступа к перекрытому методу. и он не фигня, я думал фигня это ненужная вещь, а это нужная вещь, иначе докажи обратное.

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

B~Vladi 24.09.2012 17:09

Перечитай мой коммент ещё несколько раз.

FINoM 24.09.2012 17:11

Цитата:

Сообщение от Maxmaxmахimus
А как у тебя реализованные статические свойства?

Так же, как и в любом конструкторе, создаётся переменная, меняется в методе, определенном в самом конструкторе. Обычная традиционная инкапсуляция.
Цитата:

Сообщение от Maxmaxmахimus
дело в том что интуитисно понятно что метод с этим названием вызывается при конструировании обьекта.

Ты мне как-то писал в ЛС с предложением глянуть твою функцию, я тебе сказал, что ты пытаешься реализовать ООП как в других языках. Сейчас я в этом убедился, ты пытаешься сделать "как в похапэ".
Цитата:

Сообщение от Maxmaxmахimus
я не понял, у меня если родительского метода с таким именем нет то super === undefined , включая логику не понял зачем нам знать что супер а что не супер? я даже предложения если честно не понял вот и написал что бред. Напиши другими словами.

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

FINoM 24.09.2012 17:29

Цитата:

Сообщение от Maxmaxmахimus
То есть допустим я должен в любой момент узнать сколько у меня котов например.

Ну вот и решай задачи с котами. Лично у меня не было задачи посчитать котов (количество экземпляров класса). А если надо будет, сделаю статичное свойство прямо в конструкторе:
MyClass.num = 0;
Да и вообще, приватное свойство — это то свойство, которое доступно экземпляру (каждому своё), а не всем экземплярам сразу.
Цитата:

Сообщение от Maxmaxmахimus
Что именно я пытаюсь сделать как в PHP прости? И что именно я пытаюсь сделать как в других языках?

super и какой-то __construct__.
Цитата:

Сообщение от Maxmaxmахimus
типа цепочка?

Нет, не цепочка.

Где-то было видео с какой-то русскоязычной конференции, где человек объяснял суть ООП в яваскрипте и описывал принцип копирования, в противовес наследованию.

FINoM 24.09.2012 17:30

http://vimeo.com/33393795 а вот и оно.

B~Vladi 24.09.2012 17:36

Цитата:

Сообщение от Maxmaxmахimus
давай так давай называть поля полями, в полях могут быть свойства и методы. перепиши свое сообщение с этой терминалогиеу)

Нет, давай называть "свойства" - "свойствами", а не "полями".

Лучше я поясню на коде.

function Constructor () {}

Constructor.prototype.method = function (){}; // Наследуемое свойство method.

var object = new Constructor();
object.method = function (){}; // Наследуемое свойство перекрыто.

// Теперь при работе с объектом object нужно обращаться к свойствам напрямую:
object.method();

// но никак не:
object.constructor.prototype.method.call(method);
// Или через костыли, вроде твоего.


Подобные записи говорят о том, что наследование реализовано криво с точки зрения ООП. Потомок ничего не должен знать о своих предках, они умерли для него. У него есть только то, что он унаследовал или приобрел. Для того, что бы не копипастить реализации методов и при этом иметь возможность выполнять методы предков существует делегирование, которое реализуется в коде перекрываемого метода:

object.method = function (){
// some code
return this.constructor.prototype.method.call(this);
};


Так понятно?

B~Vladi 24.09.2012 17:58

Хватит тупить. Достал.

FINoM 24.09.2012 18:00

Цитата:

Сообщение от Maxmaxmахimus
Ну ка покажи как это выгладило бы с твоей твоей реализацией ООП

Я же показал. MyClass.num = 0; и инкрементировать при каждом вызове конструктора.

FINoM 24.09.2012 18:05

Цитата:

Сообщение от Maxmaxmахimus
Покажи код

Что непонятно?
Цитата:

Сообщение от B~Vladi
Хватит тупить. Достал.


FINoM 24.09.2012 18:09

Цитата:

Сообщение от Maxmaxmахimus
у тебя MyClass еще не существует когда определяются методы.

Да, и что?

FINoM 24.09.2012 18:15

ок

devote 24.09.2012 20:55

Вот вы развели дискуссию... Какая вообще разница в том кто как расширяет объекты, кому как удобно, благо JavaScript это с легкостью позволяет... И обкакивать тот или иной способ вообще не вижу смысла.

Цитата:

Сообщение от B~Vladi
Если нужно обратиться к свойству предка - значит наследование построено неверно, либо кривая реализация у перекрывающего свойства (это относится только к методам).

Я вот тоже тебя не понял? Речь то явно идет не о том что бы обращаться к родительским методам снаружи, а дело в том, что к свойствам предка может и часто нужно обращаться из самого класса перекрывателя свойств... То есть ребенок может обращаться к родительским свойствам, для этих целей во многих языках и используются конструкции parent, super и т.д.

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

devote 25.09.2012 02:34

Цитата:

Сообщение от Дзен-трансгуманист
значит у вас кривой дизайн.

речь не о моем дизайне... Читайте пост внимательнее и предложения до конца. А не вырезайте отрывки из него:
Цитата:

Сообщение от devote
А вот если нужно снаружи получить вызов родительского свойства, то это это уже конечно не правильно.


melky 25.09.2012 16:36

Цитата:

Сообщение от Дзен-трансгуманист
Я просто перефразировал принцип KISS по отношению к ООП.

где можно почитать про KISS в JS ?

B~Vladi 25.09.2012 18:04

Цитата:

Сообщение от devote
дело в том, что к свойствам предка может и часто нужно обращаться из самого класса перекрывателя свойств... То есть ребенок может обращаться к родительским свойствам, для этих целей во многих языках и используются конструкции parent, super и т.д.

Приведи пример, когда это нужно.

x-yuri 25.09.2012 18:56

Цитата:

Сообщение от B~Vladi
Приведи пример, когда это нужно.

твой же пример:
object.method = function (){
    // some code
    return this.constructor.prototype.method.call(this);
};

B~Vladi 25.09.2012 19:12

Цитата:

Сообщение от x-yuri
твой же пример:

В моём примере обращение к предку происходит внутри реализации метода. В "рабочем" коде таких обращений быть не должно. Я прошу привести пример кода при работе с объектом, когда нужно обращаться к методам предка.

devote 25.09.2012 20:37

Цитата:

Сообщение от B~Vladi
Я прошу привести пример кода при работе с объектом, когда нужно обращаться к методам предка.

Причем тут объект, епть!! Речь идет не об объекте а о классе, который внутри может получать доступ к родительским свойствам, не нужно приписывать экземпляр класса.
пример на PHP:
class Parent {
    function hehehe() {
    }
}

class Child extends Parent {
    function hehehe() {
        parent::hehehe(); // вот про это я бл... и говорю!!!
    }
}

melky 25.09.2012 22:34

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 206427)
А JS это разве не подмножество языков с ООП?

хм ... при чём тут ООП? я про тот КИСС, который "Keep It Simple, Stupid"


Цитата:

Сообщение от Maxmaxmахimus (Сообщение 206460)
devote, я Марум, помнишь, я должен тебе пиво? Я работаю на ГО для прикрытия, о черт у нас проблемы devote, тебе пора убираться от сюда, там на верху есть ящики, сложи их в кучу чтобы выбраться от сюда, тебе нужно добраться до лаборатории Кляйнера. Я буду ждать тебя там.

качай блек мезу соурс, будь мужиком!

melky 26.09.2012 00:46

Цитата:

Сообщение от Maxmaxmахimus
на предпоследней главе уже (серьезно)

играю на харде без сохранений (только автосейвы) устроил себе некий day-z из халвы ))

йо-ло-лоу. я начал играть в день выхода.

пасхалки не забудь насобирать - батарейки BUBACELL и мониторы FONY, кружка LINUX 100% OPENSAUCE, 42 IS THE ANSWER неплохо радуют !

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

осматривал каждую комнату и вспомнинал, как было там, в первой халфе.


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