Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 13.08.2009, 19:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от hogart
* Почему я почти не слышу других мнений, кроме вашего;
Ну вам сказали, что ничего плохого в расширении прототипов нет, но вы же хотите услышать, что это плохо.
Ответить с цитированием
  #42 (permalink)  
Старый 13.08.2009, 19:38
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Kolyaj, ничуть.
Я хочу услышать почему это считается плохо
Ответить с цитированием
  #43 (permalink)  
Старый 13.08.2009, 19:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Но тут нет тех, кто считает, что это плохо.
Ответить с цитированием
  #44 (permalink)  
Старый 13.08.2009, 20:29
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Kolyaj, ну не зря же так, наверное, считают, должна быть какая-то причина.
Ответить с цитированием
  #45 (permalink)  
Старый 13.08.2009, 20:40
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от hogart
Почему я почти не слышу других мнений, кроме вашего
Да ну, бросьте, этот форум - не подневольный, здесь любой вправе высказывать своё мнение

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

Сообщение от hogart
Не соглашусь
Ну уж - Ваше право, естественно Истина не страдает от того, понимает её кто-то, или нет.

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

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

Последний раз редактировалось Dmitry A. Soshnikov, 13.08.2009 в 20:43.
Ответить с цитированием
  #46 (permalink)  
Старый 13.08.2009, 21:25
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

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

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

В отличие от объектов массивы крайне редко используются, как "хэши", перебор индексов через for не затрагивает наследуемых свойств (если не обозвали их числами), расширение прототипа массивов не выходит за рамки своего типа в отличие от всепоглощающего Object, поэтому-то и совершенно спокойное отношение по поводу расширения Array.prototype. То же самое касается любых других отдельных типов объекта - String, Number...
Ответить с цитированием
  #47 (permalink)  
Старый 14.08.2009, 00:52
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

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

Dmitry A. Soshnikov, и это — всю дорогу, я вам про Фому, а вы мне про Ерему…
Ответить с цитированием
  #49 (permalink)  
Старый 14.08.2009, 08:28
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от 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).
Ответить с цитированием
  #50 (permalink)  
Старый 14.08.2009, 08:48
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от 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 все функции использующие ее будут работать по другому.
Ответить с цитированием
Ответ



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

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