@vasIvas: WeakMap поддерживается всеми современными браузерами, не поддерживается только IE10-. Symbol - FF33+, Chrome38+, обещают в IE12. Полностью не полифилятся, но частично функционал воспроизводится элементарно.
Это не приватный метод, а приватная, не доступная вне замыкания, функция. Приватные свойства, определяемые вне конструктора (как privateFn), будут общими для всех, в конструкторе (как privateData) - свои для каждого инстанса.
@TsarS при всём при этом, у js есть пара плюсов, что не отнять. Один язык на бэке и фронте позволяет лучше знать этот язык. Одни шаблоны и (незначительная) часть кода также используется и на бэке, и фронте - не нужно дублировать. Огромное и активное сообщество, сотня тысяч модулей в npm. Довольно резвый движок. Ну и некоторым извращенцам просто нравится js.
Это я к тому, что код, приведенный вами работает корректно и с -1 (так понимаю, тут уже исправленный вариант?). Вместо этой вашей рекурсии достаточно получить остаток по делению на 2. function isEven(n){return 0 !== n % 2;} Вот только многие этот остаток сравнивают не с 0, а с 1. А с отрицательными числами % работает не совсем так, как многие думают.
@ezhikov я лично нестандартизованные методы переопределяю принудительно. Появится в стандарте / одном из движков метод, с тем же именем, что и в библиотеке - никакой старый код не поломает. А в следующей версии библиотеки никто не мешает его исправить на совместимый со стандартом. Тут главная опасность исходит от библиотек, также модифицирующих стандартные объекты. Так что вместе с подобным никаких sugar, mootols, prototype.js. Ну и главное - следить за планами расширения языка.
@QTnub да черт его знает. Банально javascript.ru/RegExp . || это 2 символа, при том спецсимвола. Нужно экранировать каждый, иначе эта конструкция будет воспринята как одна палка или пустой набор символов.
@Petroveg быстрее далеко не всегда значит лучше, хотя я и не говорил, что моё лучше. Проще. Модуль, регулярка - зачем? Какой-то новичок вообще не поймёт этой регулярки. Очень сомневаюсь, что хоть кому-то из тех, кому потребовалось решить подобную задачу на столько важна производительность. А важна - решение с for, что написал по ссылке, длиннее вашего примерно на столько же, но куда быстрее. Да и если важна производительность, лучше в первую очередь искать в других местах. В тех, что используются куда чаще и можно выгадать не несколько процентов, а ускорить в сотни и тысячи раз, пример я привел. Еще раз повторю - говорить тут больше не о чем, предлагаю закончить.
@Petroveg вы вроде сами за производительность против лаконичности ухватились. Всё, что я сделал - показал, что раз вам она так важна - есть куда больший простор для оптимизации :) Мой вариант в выигрыше за краткостью и приемлемой производительностью, чего о вашем способе повторения строки не скажешь :)
@Petrovegjsperf.com/bntytyntny обход простым циклом в 2 раза быстрее вашего, компактный вариант, за счет лишних итераций, на треть медленней. Еще хотите поспорить о производительности js? :)
@Petroveg очень смешно, что раз вам на столько важна именно скорость, вы обходите массив используя forEach вместо обычного цикла. Очень сомневаюсь, что пара лишних вызовов функции критична по скорости по сравнению с компактностью.
Это не приватный метод, а приватная, не доступная вне замыкания, функция. Приватные свойства, определяемые вне конструктора (как privateFn), будут общими для всех, в конструкторе (как privateData) - свои для каждого инстанса.