Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.08.2009, 23:17
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

А вот мне кажется, что расширение прототипов встроенных объектов только вводит путаницу в код.
Ответить с цитированием
  #12 (permalink)  
Старый 10.08.2009, 23:22
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
А по массивам не надо бегать for-in
Я в курсе А вообще - почему "не надо"?

Сообщение от Андрей Параничев
А вот мне кажется, что расширение прототипов встроенных объектов только вводит путаницу в код.
Возможно, но, если пишется локальный фреймворк - почему нет? Если популярный фреймворк для общего использования и есть соответствующая документация - почему нет? Monkey patch - вполне удобная практика в динамических языках.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 10.08.2009 в 23:33.
Ответить с цитированием
  #13 (permalink)  
Старый 10.08.2009, 23:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ну тут сначала нужно разделить случаи. Первый -- это нивелирование различий браузеров: тот же forEach (да и остальные методы, кроме reduce-reduceRight) везде есть, в ИЕ нет. Второй случай -- добавление своих методов. Тут я тоже не вижу путаницы. Простой и полезный метод last, например,
var lastElem = getMyArray().last();
Где тут путаница?

Вот если бы вопрос стоял "Расширять ли прототипы во фреймворках?", тогда можно подумать, но в каждом случае отдельно, в зависимости от его целей и задач.
Ответить с цитированием
  #14 (permalink)  
Старый 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.
Ответить с цитированием
  #15 (permalink)  
Старый 10.08.2009, 23:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Андрей Параничев
откуда взялся этот ласт
Оттуда же, откуда взялась бы функция. Ты ведь знаешь стандартные методы Array? Знаешь, что там нет last? Значит он где-то в проекте реализован. Значит можно кликнуть колесиком и перейти к реализации ))) Мы ведь, надеюсь, не говорим о тех, кто не знает JavaScript? А если ты не знаешь JS, значит ты не можешь быть уверен, откуда взялась и функция last.

Сообщение от Андрей Параничев
Я бы реализовал функцию last()
Вложенный вызов функций читается хуже цепочки методов.
Ответить с цитированием
  #16 (permalink)  
Старый 11.08.2009, 19:59
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Сообщение от Kolyaj
А какие еще могут возникнуть проблемы?
Вот я и спрашиваю, какие еще могут возникнуть проблемы?
Ответить с цитированием
  #17 (permalink)  
Старый 11.08.2009, 20:03
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Сообщение от Андрей Параничев
Может я и не прав, но думаю, что нужно локализовать свой код так, чтоб он не трогал глобальную область видимости и прототипы встроенных объектов (что тоже, по сути, глобально).
Почему, почему, почему? Ведь очевидно, что две библиотеки подключают только очень небрежные люди.
Ответить с цитированием
  #18 (permalink)  
Старый 11.08.2009, 20:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от hogart
Вот я и спрашиваю, какие еще могут возникнуть проблемы?
Ну тогда лично я не вижу проблем
Ответить с цитированием
  #19 (permalink)  
Старый 11.08.2009, 20:30
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Kolyaj, я, вроде бы, тоже. Но не хочется опираться только на собственную самоуверенность в таком достаточно фундаментальном вопросе
Ответить с цитированием
  #20 (permalink)  
Старый 11.08.2009, 22:26
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от hogart Посмотреть сообщение
1) Действительно ли плохо менять встроенные прототипы?

2) Чем это плохо, кроме того, что возможно, при подключении еще одного фреймворка, возникнут конфликты?

3) Какие подводные камни?
1) 2) 3) Наверное не "менять прототипы", а расширять прототипы. Удобное, компактное расширение - идея прототипов, это хорошо. Плохо, когда причиной расширения становится не реюз и компактность, а "типа-объектное-программирование-чтоб-было" - любую мелкую задачу через Object. Раздражает прежде всего контроль за именами.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск