Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Расширение прототипов встроенных обьектов: хорошо или плохо? (https://javascript.ru/forum/misc/4646-rasshirenie-prototipov-vstroennykh-obektov-khorosho-ili-plokho.html)

Kolyaj 13.08.2009 19:00

Цитата:

Сообщение от hogart
* Почему я почти не слышу других мнений, кроме вашего;

Ну вам сказали, что ничего плохого в расширении прототипов нет, но вы же хотите услышать, что это плохо.

hogart 13.08.2009 19:38

Kolyaj, ничуть.
Я хочу услышать почему это считается плохо:)

Kolyaj 13.08.2009 19:52

Но тут нет тех, кто считает, что это плохо.

hogart 13.08.2009 20:29

Kolyaj, ну не зря же так, наверное, считают, должна быть какая-то причина.

Dmitry A. Soshnikov 13.08.2009 20:40

Цитата:

Сообщение от hogart
Почему я почти не слышу других мнений, кроме вашего

Да ну, бросьте, этот форум - не подневольный, здесь любой вправе высказывать своё мнение ;)

Цитата:

Сообщение от hogart
Зачем вы меня убеждаете итерировать массив for..in'ом?

Не-а, не убеждал. Ещё раз: я - ответил на Ваш первоначальный вопрос/вопросы + ответил на промежуточные вопросы (даже, чтобы не было юридических придирок, скажу, что ответил в рамках своих мыслей, своего мнения). Всё :) Ни к чему не принуждал, ничем не убеждал (ага?).

Цитата:

Сообщение от hogart
Не соглашусь

Ну уж - Ваше право, естественно ;) Истина не страдает от того, понимает её кто-то, или нет.

Цитата:

Сообщение от hogart
В приведенном вами коде хорошо видно

Искажённое восприятие тоже исправляется. Значит надо садиться и изучать Питон и JS. С самого начала. Будут трудности - спрашивайте, всегда поможем. Успехов.

Цитата:

Сообщение от hogart
ну не зря же так, наверное, считают, должна быть какая-то причина

Да и причины были приведены (целый ряд причин). Те, кто считают, что это плохо, вряд ли имеют какие-то сильно отклоняющиеся причины.

Zeroglif 13.08.2009 21:25

Массив можно запросто перебирать через for-in, если порядок не важен, а сам массив длинный и сильно разреженный. Ну, или если кроме индексов у массива есть другие свойства (мало ли)...

Object.prototype расширять можно, но возникает проблема контроля за именами. Объекты в js - это не словари, не хэши, не что-то там жёсткое, они не пусты и изначально что-то наследуют, просто стандартные наследуемые свойства для удобства исключены из перебора (как будто их нет), а имена всем известны. Наследуемые свойства будут видны у всех объектов, и обычные для объектов операции - перебор свойств, проверка наличия свойств, проверка наличия и типа значения, удаление и т.д., всё это может потребовать дополнительного алгоритма отсечения наследуемых свойств прописанных руками в Object.prototype. В принципе, если скрипт свой, то ничего страшного в этом нет, хуже когда скрипт чужой объединяется с твоим, и начинаются конфликты - ты перебор делаешь, а контроль в нём не предусмотрел, и понеслось. Где-то отсюда и растут ноги у идеи "не трогать Object.prototype".

В отличие от объектов массивы крайне редко используются, как "хэши", перебор индексов через for не затрагивает наследуемых свойств (если не обозвали их числами), расширение прототипа массивов не выходит за рамки своего типа в отличие от всепоглощающего Object, поэтому-то и совершенно спокойное отношение по поводу расширения Array.prototype. То же самое касается любых других отдельных типов объекта - String, Number...

hogart 14.08.2009 00:52

Dmitry A. Soshnikov, вы таки пытаетесь меня троллить? Зачем? Что значит ваше это «форум не подневольный»? Что значит ваше это «садитесь учить питон и JS»? Не пора ли вам самому подучить хотя бы реальный JS и перестать уже парить в стратосфере? Как соотносятся данный форум и юриспруденция? Для чего вы мне рассказывали, что можно итерировать массив for..in'ом?
Вы высказали свое мнение, за что я вам благодарен, т.к. очевидно, что вы таки, в общем, разбираетесь в динамических языках. Тем не менее, несмотря на свой же совет воспринимать происходящее как «всего лишь форум», сами вы отвечаете в довольно агрессивной манере, обвиняете меня в незнании питона (форум, кстати, совсем не про питон; а касательно аспектов этого языка я консультировался с людьми, которые пишут на нем более пяти лет). Я узнал ваше мнение и даже поблагодарил за него, а вы продолжаете отвечать — отвечать за остальных участников. И поэтому-то диалог у нас с вами так быстро и развалился.
Я в очередной раз убедился, что диалог с человеком, который в нике указывает настоящие Ф.И.О., длится не более пары реплик. Далее начинаются размахивания ЧСВ, ссылки на Капитана Очевидность, попытки отвечать за всех, и т.д.
Я хотел с вами поговорить о тонкостях языка, о том, как трудно опознать грань между практичностью и красотой (ведь вы же знаете JS 1.7) и как трудно на этой грани удержаться…

hogart 14.08.2009 00:55

Dmitry A. Soshnikov, и это — всю дорогу, я вам про Фому, а вы мне про Ерему…

x-yuri 14.08.2009 08:28

Цитата:

Сообщение от Kolyaj
Prototype не кошерно, потому что они JavaScript не знают Смотрите, например, реализацию метода each для массивов.

это что ли?
Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  },


Цитата:

Сообщение от Kolyaj
А по массивам не надо бегать for-in, у них есть (везде, кроме ИЕ) метод forEach

я вообще не знаю, зачем это нужно. Т.е., конечно, можно, но не могу представить ситуацию, когда нужно...

Цитата:

Сообщение от hogart
Почему я почти не слышу других мнений, кроме вашего;

потому что к тому моменту все уже сказали по теме топика

Цитата:

Сообщение от Zeroglif
Удобное, компактное расширение - идея прототипов, это хорошо. Плохо, когда причиной расширения становится не реюз и компактность, а "типа-объектное-программирование-чтоб-было" - любую мелкую задачу через Object. Раздражает прежде всего контроль за именами.

Zeroglif, а можно все же подробнее про "объектное-программирование-чтоб-было" и про контроль за именами?

Цитата:

Сообщение от hogart
Для чего вы мне рассказывали, что можно итерировать массив for..in'ом?

это началось с того, что Dmitry A. Soshnikov неправильно тебя понял, а потом никто не напомнил про изначальную мысль
Цитата:

Не могу себе представить, зачем бы мне понадобилось итерировать по массивам через for..in (в js).

Kolyaj 14.08.2009 08:48

Цитата:

Сообщение от hogart
Для чего вы мне рассказывали, что можно итерировать массив for..in'ом?

Вероятно для того, что их действительно можно так итерировать, но расширение прототипа влияет на такой способ итерации.

Цитата:

Сообщение от x-yuri
это что ли?

Это в старом варианте, так не страшно. Хуже в более свежем
var _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available

  function each(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  }
  if (!_each) _each = each;
Потому что each, в результате, не то же самое, что _each, и в IE все функции использующие ее будут работать по другому.


Часовой пояс GMT +3, время: 15:07.