10.08.2009, 23:17
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
А вот мне кажется, что расширение прототипов встроенных объектов только вводит путаницу в код.
|
|
10.08.2009, 23:22
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от Kolyaj
|
А по массивам не надо бегать for-in
|
Я в курсе А вообще - почему "не надо"?
Сообщение от Андрей Параничев
|
А вот мне кажется, что расширение прототипов встроенных объектов только вводит путаницу в код.
|
Возможно, но, если пишется локальный фреймворк - почему нет? Если популярный фреймворк для общего использования и есть соответствующая документация - почему нет? Monkey patch - вполне удобная практика в динамических языках.
Последний раз редактировалось Dmitry A. Soshnikov, 10.08.2009 в 23:33.
|
|
10.08.2009, 23:26
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Ну тут сначала нужно разделить случаи. Первый -- это нивелирование различий браузеров: тот же forEach (да и остальные методы, кроме reduce-reduceRight) везде есть, в ИЕ нет. Второй случай -- добавление своих методов. Тут я тоже не вижу путаницы. Простой и полезный метод last, например,
var lastElem = getMyArray().last();
Где тут путаница?
Вот если бы вопрос стоял "Расширять ли прототипы во фреймворках?", тогда можно подумать, но в каждом случае отдельно, в зависимости от его целей и задач.
|
|
10.08.2009, 23:41
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Kolyaj,
Я бы реализовал функцию last(), а не метод в прототипе. Чтобы у других программистов не возникало вопросов при просмотре, например, такого кода:
var myArray = ["some", "thing", "here"];
doSomething(myArray.last())
Тут может быть непрозрачно, откуда взялся этот ласт. Но пример утрирован, конечно.
Может я и не прав, но думаю, что нужно локализовать свой код так, чтоб он не трогал глобальную область видимости и прототипы встроенных объектов (что тоже, по сути, глобально).
Последний раз редактировалось Андрей Параничев, 10.08.2009 в 23:45.
|
|
10.08.2009, 23:49
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Андрей Параничев
|
откуда взялся этот ласт
|
Оттуда же, откуда взялась бы функция. Ты ведь знаешь стандартные методы Array? Знаешь, что там нет last? Значит он где-то в проекте реализован. Значит можно кликнуть колесиком и перейти к реализации ))) Мы ведь, надеюсь, не говорим о тех, кто не знает JavaScript? А если ты не знаешь JS, значит ты не можешь быть уверен, откуда взялась и функция last.
Сообщение от Андрей Параничев
|
Я бы реализовал функцию last()
|
Вложенный вызов функций читается хуже цепочки методов.
|
|
11.08.2009, 19:59
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Сообщение от Kolyaj
|
А какие еще могут возникнуть проблемы?
|
Вот я и спрашиваю, какие еще могут возникнуть проблемы?
|
|
11.08.2009, 20:03
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Сообщение от Андрей Параничев
|
Может я и не прав, но думаю, что нужно локализовать свой код так, чтоб он не трогал глобальную область видимости и прототипы встроенных объектов (что тоже, по сути, глобально).
|
Почему, почему, почему? Ведь очевидно, что две библиотеки подключают только очень небрежные люди.
|
|
11.08.2009, 20:28
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от hogart
|
Вот я и спрашиваю, какие еще могут возникнуть проблемы?
|
Ну тогда лично я не вижу проблем
|
|
11.08.2009, 20:30
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Kolyaj, я, вроде бы, тоже. Но не хочется опираться только на собственную самоуверенность в таком достаточно фундаментальном вопросе
|
|
11.08.2009, 22:26
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от hogart
|
1) Действительно ли плохо менять встроенные прототипы?
2) Чем это плохо, кроме того, что возможно, при подключении еще одного фреймворка, возникнут конфликты?
3) Какие подводные камни?
|
1) 2) 3) Наверное не "менять прототипы", а расширять прототипы. Удобное, компактное расширение - идея прототипов, это хорошо. Плохо, когда причиной расширения становится не реюз и компактность, а "типа-объектное-программирование-чтоб-было" - любую мелкую задачу через Object. Раздражает прежде всего контроль за именами.
|
|
|
|