13.08.2009, 19:00
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от hogart
|
* Почему я почти не слышу других мнений, кроме вашего;
|
Ну вам сказали, что ничего плохого в расширении прототипов нет, но вы же хотите услышать, что это плохо.
|
|
13.08.2009, 19:38
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Kolyaj, ничуть.
Я хочу услышать почему это считается плохо
|
|
13.08.2009, 19:52
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Но тут нет тех, кто считает, что это плохо.
|
|
13.08.2009, 20:29
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Kolyaj, ну не зря же так, наверное, считают, должна быть какая-то причина.
|
|
13.08.2009, 20:40
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от hogart
|
Почему я почти не слышу других мнений, кроме вашего
|
Да ну, бросьте, этот форум - не подневольный, здесь любой вправе высказывать своё мнение
Сообщение от hogart
|
Зачем вы меня убеждаете итерировать массив for..in'ом?
|
Не-а, не убеждал. Ещё раз: я - ответил на Ваш первоначальный вопрос/вопросы + ответил на промежуточные вопросы (даже, чтобы не было юридических придирок, скажу, что ответил в рамках своих мыслей, своего мнения). Всё Ни к чему не принуждал, ничем не убеждал (ага?).
Сообщение от hogart
|
Не соглашусь
|
Ну уж - Ваше право, естественно Истина не страдает от того, понимает её кто-то, или нет.
Сообщение от hogart
|
В приведенном вами коде хорошо видно
|
Искажённое восприятие тоже исправляется. Значит надо садиться и изучать Питон и JS. С самого начала. Будут трудности - спрашивайте, всегда поможем. Успехов.
Сообщение от hogart
|
ну не зря же так, наверное, считают, должна быть какая-то причина
|
Да и причины были приведены (целый ряд причин). Те, кто считают, что это плохо, вряд ли имеют какие-то сильно отклоняющиеся причины.
Последний раз редактировалось Dmitry A. Soshnikov, 13.08.2009 в 20:43.
|
|
13.08.2009, 21:25
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Массив можно запросто перебирать через for-in, если порядок не важен, а сам массив длинный и сильно разреженный. Ну, или если кроме индексов у массива есть другие свойства (мало ли)...
Object.prototype расширять можно, но возникает проблема контроля за именами. Объекты в js - это не словари, не хэши, не что-то там жёсткое, они не пусты и изначально что-то наследуют, просто стандартные наследуемые свойства для удобства исключены из перебора (как будто их нет), а имена всем известны. Наследуемые свойства будут видны у всех объектов, и обычные для объектов операции - перебор свойств, проверка наличия свойств, проверка наличия и типа значения, удаление и т.д., всё это может потребовать дополнительного алгоритма отсечения наследуемых свойств прописанных руками в Object.prototype. В принципе, если скрипт свой, то ничего страшного в этом нет, хуже когда скрипт чужой объединяется с твоим, и начинаются конфликты - ты перебор делаешь, а контроль в нём не предусмотрел, и понеслось. Где-то отсюда и растут ноги у идеи "не трогать Object.prototype".
В отличие от объектов массивы крайне редко используются, как "хэши", перебор индексов через for не затрагивает наследуемых свойств (если не обозвали их числами), расширение прототипа массивов не выходит за рамки своего типа в отличие от всепоглощающего Object, поэтому-то и совершенно спокойное отношение по поводу расширения Array.prototype. То же самое касается любых других отдельных типов объекта - String, Number...
|
|
14.08.2009, 00:52
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Dmitry A. Soshnikov, вы таки пытаетесь меня троллить? Зачем? Что значит ваше это «форум не подневольный»? Что значит ваше это «садитесь учить питон и JS»? Не пора ли вам самому подучить хотя бы реальный JS и перестать уже парить в стратосфере? Как соотносятся данный форум и юриспруденция? Для чего вы мне рассказывали, что можно итерировать массив for..in'ом?
Вы высказали свое мнение, за что я вам благодарен, т.к. очевидно, что вы таки, в общем, разбираетесь в динамических языках. Тем не менее, несмотря на свой же совет воспринимать происходящее как «всего лишь форум», сами вы отвечаете в довольно агрессивной манере, обвиняете меня в незнании питона (форум, кстати, совсем не про питон; а касательно аспектов этого языка я консультировался с людьми, которые пишут на нем более пяти лет). Я узнал ваше мнение и даже поблагодарил за него, а вы продолжаете отвечать — отвечать за остальных участников. И поэтому-то диалог у нас с вами так быстро и развалился.
Я в очередной раз убедился, что диалог с человеком, который в нике указывает настоящие Ф.И.О., длится не более пары реплик. Далее начинаются размахивания ЧСВ, ссылки на Капитана Очевидность, попытки отвечать за всех, и т.д.
Я хотел с вами поговорить о тонкостях языка, о том, как трудно опознать грань между практичностью и красотой (ведь вы же знаете JS 1.7) и как трудно на этой грани удержаться…
|
|
14.08.2009, 00:55
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Dmitry A. Soshnikov, и это — всю дорогу, я вам про Фому, а вы мне про Ерему…
|
|
14.08.2009, 08:28
|
|
|
|
Регистрация: 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).
|
|
|
14.08.2009, 08:48
|
Новичок на форуме
|
|
Регистрация: 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 все функции использующие ее будут работать по другому.
|
|
|
|