1. Для защиты от страшных хакеров, которые «взломают» мой объект.
2. Для того, чтобы использующий класс программист, видел только его интерфейс и ему не мозолили глаза способы реализации.
Для 2-го вполне хватает jsdoc'ов с private и IDE'шек с автокомплитом.
Нет. Те, кто приходят с True-ООП языков первым делом приходят в дикий восторг: «надо же, я могу в рантайме менять структуру всех объектов, офигеть!»
После чего эти люди начинают на каждое упоминание классов писать «не надо классов! вы не понимаете всей красоты прототипов!».
Через какое-то время до некоторых начинает доходить: «ну могу я структуру прототипа в рантайме поменять, ну что дальше?»
Это не баг, это просто со старого проекта код тупо перетащили. Нужно было бы отрефакторить, но решили просто нейроны пустить через сетчатку туда и обратно. Правда слепое пятно образовалось, но вообще работает, так что лучше не трогать.
jshint-комментарии в коде, кстати, дополнительную полезную инфу несут, не только для jshint.
Типа «да, здесь на первый взгляд написано не совсем правильно, но конкретно здесь так надо».
JSLint тоже сначала показался слишком жёстким, но потом привык :)
У JSHint был плохой парсер. Например:
for (k in obj) {
if (obj[k] === 5) {...}
}
Здесь должно быть предупреждение, типа «юзайте if (obj.hasOwnProperty(k))», но JSHint проверял только на то, что после for сразу стоит if.
Может исправили, не знаю.
Видимо автор недавно стал работать с вордпрессом, нашёл десяток говнокодистых моментов и решил написать статью.
Что будет когда он найдёт там остальные десять тысяч? Каждый раз по статье?
Это и есть полиморфизм.
Если я пишу:
function func($a) {
foreach ($a as $k => $v) {
//…
}
}
То мне всё равно, массив это или объект-итератор.
Сейчас нет возможности указать «я хочу здесь итератор и мне плевать, объект это или нативный массив».
Я уже не говорю о том, чтобы функции для работы с массивами могли объекты с нужными интерфейсами принимать.
Предлагается добавить возможность указания нескольких типов для этих случаев, например:
function (array|Traversable $in) {}
Это круто, конечно.
Но конкретно в этом случае лучше бы включили array в Traversable и в ArrayAccess или отдельные псевдо-типы для этого сделали.
Вот когда удачно пересадят, тогда и узнаем, где личность находится )
У многих людей, которых знаю, скорее всего она находится в заднице.
1. Для защиты от страшных хакеров, которые «взломают» мой объект.
2. Для того, чтобы использующий класс программист, видел только его интерфейс и ему не мозолили глаза способы реализации.
Для 2-го вполне хватает jsdoc'ов с private и IDE'шек с автокомплитом.
После чего эти люди начинают на каждое упоминание классов писать «не надо классов! вы не понимаете всей красоты прототипов!».
Через какое-то время до некоторых начинает доходить: «ну могу я структуру прототипа в рантайме поменять, ну что дальше?»
TypeScript например так:
function func(x = 5) {
return x * 3;
}
function func(x) {
if (x === void 0) { x = 5; }
return x * 3;
}
Вот, например, картинка.
www.vetmed.vt.edu/education/Curriculum/VM8054/EYE/RTNADGRM.JPG
Light идёт сверху, а Pigment Cell внизу. И Signal обратно пошёл.
name = name || «default»;
Типа «да, здесь на первый взгляд написано не совсем правильно, но конкретно здесь так надо».
JSLint тоже сначала показался слишком жёстким, но потом привык :)
У JSHint был плохой парсер. Например:
for (k in obj) {
if (obj[k] === 5) {...}
}
Здесь должно быть предупреждение, типа «юзайте if (obj.hasOwnProperty(k))», но JSHint проверял только на то, что после for сразу стоит if.
Может исправили, не знаю.
Что будет когда он найдёт там остальные десять тысяч? Каждый раз по статье?
Если я пишу:
function func($a) {
foreach ($a as $k => $v) {
//…
}
}
То мне всё равно, массив это или объект-итератор.
Сейчас нет возможности указать «я хочу здесь итератор и мне плевать, объект это или нативный массив».
Я уже не говорю о том, чтобы функции для работы с массивами могли объекты с нужными интерфейсами принимать.
function (array|Traversable $in) {}
Это круто, конечно.
Но конкретно в этом случае лучше бы включили array в Traversable и в ArrayAccess или отдельные псевдо-типы для этого сделали.