ФорумПрограммированиеПыхнуть хотите?Готовые решения → go.js - классы для JavaScript и другое

go.js - классы для JavaScript и другое

  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 25 января 2012 г. 17:11, спустя 3 минуты 15 секунд

    var User = function() {
     this.sex = 'man';
    };
    var PyhaUser = function() {
     this.troll = true;
    };
    PyhaUser.prototype = new User;
    var phpdude = new PyhaUser();
    alert(phpdude.sex);
    alert(phpdude.troll);
    Спустя 30 сек.
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 17:13, спустя 2 минуты 8 секунд

    В js наследуются объекты вроде, а не классы, ну ладно, тогда покажи мне пример для чего мне это может потребоваться (:

    ООП одно везде, набор взаимодействующих объектов, каждый инкапсулирует в себе свои данные.
    У каждого есть набор методов, который зачастую одинаков у большого количества объектов.
    Почему бы не назвать эту совокупность каким-нибудь названием, например "класс", пускай соответствующей синтаксической конструкции в JS и нет.
    Спустя 70 сек.
    PyhaUser.prototype = new User;

    Конструктор new User может принимать какие-то аргументы и выполнять какие-то действия по инициализации объекта. При создании прототипа для "наследника" они явно излишни. Что делать?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 25 января 2012 г. 17:14, спустя 42 секунды

    Ivan, нуу, ты вызываешь конструктор, лишний раз создаешь объект - некрасиво как бы

    а что если конструктор ожидает аргументов?
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 17:16, спустя 2 минуты 10 секунд

    Кроме того прямое присвоение PyhaUser.prototype рвёт цепочку constructor.prototype, в следствии чего до предков уже не достучаться.
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 25 января 2012 г. 17:26, спустя 10 минут 29 секунд

    Покажите пример, когда вам реально это понадобилось, и стандартного прототипа вам не хватило, я пример увижу и реально пойму вас.
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 17:40, спустя 13 минут 59 секунд

    Есть допустим контрол (виджет) - просто div, а в нём кнопочки-хуёпочки, жмёшь на них и что-то происходит. И таких контролов на странице несколько.

    Пишем "класс" (прототип) и для каждого контрола создаём объект, передавая ему в конструктор слой контрола.
    И внутри уже из слоя достаются кнопки, на них вешаются события и что-то происходит.
    Данные инкапсулированы в объекте, код думает о своём виджите, а сколько их ещё на странице ему всё равно.
    Это зачем "классы" нужны.

    И вот есть другие виджеты, у которых всё почти тоже самое, но некоторые аспекты поведения немного другие.
    Чего делать? По человечески нужно сделать "абстрактный класс", а от него унаследовать ещё парочку и переопределить в них только то, что для них уникально.
    Собственно все те же принципы действуют, хоть в классовом, хоть в прототипном ООП.
    Спустя 112 сек.
    Ну и проблема с конструктором - конструктор что-то делает: достаёт из слоя элементы, вешает на них события, поэтому так делать:
    ChildClass.prototype = new ParentClass();

    некошерно.

    Ну и ещё куча нюансов.
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 25 января 2012 г. 19:12, спустя 1 час 32 минуты 8 секунд

    Не убедил
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 19:23, спустя 10 минут 54 секунды

    А зачем мне это?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 19:26, спустя 2 минуты 57 секунд


    А зачем мне это?
    не убедил
    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 января 2012 г. 19:42, спустя 15 минут 19 секунд

    убедил/не убедил на пiха.ру.
    Спустя 14 сек.
    борьба убеждений на пiха.ру
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 25 января 2012 г. 21:02, спустя 1 час 20 минут 57 секунд


    Не убедил

    Напиши конструктор форм на js - убедишься…
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 25 января 2012 г. 21:18, спустя 15 минут 40 секунд

    Ну вот тут уже более менее аргумент
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 25 января 2012 г. 22:31, спустя 1 час 13 минут 11 секунд

    хы хы, в разы меньше строк но значительно аргументированнее)
  • stopkran

    Сообщения: 53 Репутация: N Группа: Кто попало

    Spritz 27 января 2012 г. 13:53, спустя 1 день 15 часов 21 минуту

    И вот есть другие виджеты, у которых всё почти тоже самое, но некоторые аспекты поведения немного другие. Чего делать?


    Ну, можно передавать аспекты поведения в качестве параметров в функцию. А можно записать в отдельный массив, и из функции обращаться к этому массиву. То есть вопрос не "зачем ООП", а "почему нельзя сделать чисто на функциях?".

    Конструктор форм - это несколько функций ("Добавить поле", "Проверить форму перед отправкой"…) и массив с описаниями полей. Зачем здесь наследование?..
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 27 января 2012 г. 13:59, спустя 6 минут 24 секунды

    stopkran, всё можно сделать чисто на функциях (процедурах). А можно вообще без функций и даже без циклов обойтись.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!