Ответы пользователя по тегу JavaScript
  • Почему функция общего прототипа не работает в разных конструкторах (ОСТОРОЖНО, НОВИЧОК!)?

    danielnewman
    @danielnewman
    Front-end
    Не очень хороший способ, но кто мешает расширить прототип родителя? Вот таким греховным образом числа в моем приложении обретают формат:

    /*    Метод format конструктора Number >>>
     *    Расширение прототипа
     *
     *    Метод позволяет задавать число знаков после запятой и
     *    Вводить знак валют до или после значения.
     *
     *    Пример работы:    (123456789.12345).format(2, 2, '—', '=')
     *        возвращает:    1—23—45—67—89=12
     *
     *    Все экземпляры Number наследуются от Number.prototype.
     */
    Number.prototype.format = function (n, x, s, c) {
        var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '$') + ')';
        var num = this.toFixed(Math.max(0, ~~n));
    
        return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));
    };


    И так вот используются:

    Number(condPriceMin).format(0, 3, '&nbsp', '.') + '<i class="fa fa-rub"></i>';
    Ответ написан
    Комментировать
  • Как работает замыкание вообще и в JavaScript, в частности?

    danielnewman
    @danielnewman Автор вопроса
    Front-end
    Упиваюсь Флэнигоном "Полное руководство". Там есть хорошее объяснение и краткая врезка. Полное описание вышлю по просьбе в личку, а врезку - врезку сюда выложу.

    Реализация замыканий

    Понять суть замыканий будет совсем несложно, если усвоить правило лек-
    сической области видимости: во время выполнения функции используется
    цепочка областей видимости, которая действовала в момент ее определе-
    ния. Однако некоторые программисты испытывают сложности при освое-
    нии замыканий, потому что не до конца понимают особенности реализа-
    ции. Известно, думают они, что локальные переменные, объявленные во
    внешней функции, прекращают свое существование после выхода из внеш-
    ней функции, но тогда как вложенная функция может использовать цепоч-
    ку областей видимости, которая больше не существует? Если вы задавали
    себе такой вопрос, значит, у вас наверняка есть опыт работы с низкоуров-
    невыми языками программирования, такими как C, и аппаратными архи-
    тектурами, использующими стек: если локальные переменные размещать
    на стеке, они действительно прекращают свое существование после завер-
    шения функции.
    Но вспомните определение цепочки областей видимости из раздела 3.10.3.
    Там она описывалась как список объектов, а не стек. Каждый раз, когда
    интерпретатор JavaScript вызывает функцию, он создает новый объект для
    хранения локальных переменных этой функции, и этот объект добавляет-
    ся в цепочку областей видимости. Когда функция возвращает управление,
    этот объект удаляется из цепочки. Если в программе нет вложенных функ-
    ций и нет ссылок на этот объект, он будет утилизирован сборщиком мусо-
    ра. Если в программе имеются вложенные функции, тогда каждая из этих
    функций будет владеть ссылкой на свою цепочку областей видимости, а це-
    почка будет ссылаться на объекты с локальными переменными. Если объ-
    екты вложенных функций существуют только в пределах своих внешних
    функций, они сами будут утилизированы сборщиком мусора, а вместе
    с ними будут утилизированы и объекты с локальными переменными, на
    которые они ссылались. Но если функция определяет вложенную функ-
    цию и возвращает ее или сохраняет в свойстве какого-либо объекта, то об-
    разуется внешняя ссылка на вложенную функцию. Такой объект вложен-
    ной функции не будет утилизирован сборщиком мусора, и точно так же не
    будет утилизирован объект с локальными переменными, на который она
    ссылается.
    Ответ написан
    Комментировать
  • Нужна ли на хабре статья про правила оформления css и js?

    danielnewman
    @danielnewman
    Front-end
    Очень мало о верстке можно почитать в рунете — нехай будет.
    Если боитесь, что заклюют — киньте сюда пару ссылок на код «по моим правилам».
    Ответ написан
    Комментировать