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)

Dmitry A. Soshnikov 13.08.2009 12:55

Цитата:

Сообщение от hogart
Вот именно.

;)

Ну, Вы получили ответ на первоначальный вопрос? Картина прояснилась?

hogart 13.08.2009 13:07

Dmitry A. Soshnikov, я так и не понял, зачем вы приводите параллель между питоновским for..in и JS-ным:)

Dmitry A. Soshnikov 13.08.2009 13:12

Цитата:

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

Для примера (как подводный камень расширения Array.prototype). В целом же, никто не может утверждать, что for ... in нельзя / "не надо" использовать для массивов - это обычная конструкция, почему нет? А что, for ... in в Питоне и for ... in в JS - это такие мега-разные вещи, что между ними нельзя проводить параллель? К тому же, это не касается первоначального вопроса. Так с первоначальным-то вопросом разобрались (простите, что спрашиваю в очередной раз)?

hogart 13.08.2009 13:20

Цитата:

Сообщение от Dmitry A. Soshnikov
А что, for ... in в Питоне и for ... in в JS - это такие мега-разные вещи

достаточно разные, на мой взгляд.

Цитата:

Сообщение от Dmitry A. Soshnikov
Так с первоначальным-то вопросом разобрались (простите, что спрашиваю в очередной раз)?

Вы достаточно аргументированно и обширно высказали свое мнение, спасибо:)

Dmitry A. Soshnikov 13.08.2009 13:36

Цитата:

Сообщение от hogart
на мой взгляд.

Ну, "имхо" не возбраняется никогда ;)

Цитата:

Сообщение от hogart
достаточно разные

А всё же, мне интересно, покажите, в чём?

hogart 13.08.2009 13:50

Цитата:

Сообщение от Dmitry A. Soshnikov
А всё же, мне интересно, покажите, в чём?

в питоне for..in обходит список (или, скорее итератор:)). в JS for..in обходит словарь. Массив, конечно, можно назвать частным случаем словаря, но как-то не хочется.
И, чисто практическое соображение: массив в JS экономичнее обходится через старый добрый «сишный» for.:)

Dmitry A. Soshnikov 13.08.2009 14:09

Цитата:

Сообщение от hogart
в питоне for..in обходит список (или, скорее итератор). в JS for..in обходит словарь

Python:

for (key, value) in {'a': 1, 'b': 2}.items():
    print(key, value) # a 1, b 2

for key in {'a': 1, 'b': 2}:
    print(key); # a, b


JS (1.7):

for (var [key, value] in {a: 1, b: 2}) {
    alert([key, value]); // a,1 ; b,2
}

for (var key in {a: 1, b: 2}) {
    alert(key); // a; b
}


for / for each ... in равно так же может обходить и массив, не только объект (см., опять же, array comprehensions).

var a = [1, 2];
for (var key in a) {
    alert([key, a[key]]); // 0,1; 1,2
}


Цитата:

Сообщение от hogart
И, чисто практическое соображение: массив в JS экономичнее обходится через старый добрый «сишный» for

Ага, т.к. не анализируется цепь прототипов, но это уже в сторону преимуществ, а не мега-отличий ;)

hogart 13.08.2009 18:12

Давайте не будем про JS 1.7. Если вы имеете счастье на нем писать, то я рад за вас.

Dmitry A. Soshnikov 13.08.2009 18:35

Цитата:

Сообщение от hogart
Давайте не будем про JS 1.7

Давайте.

JS (1.5)

for (var key in {a: 1, b: 2}) {
    alert(key); // a; b
}


Python:

for key in {'a': 1, 'b': 2}:
    print(key); # a, b


Вы правильно трактуйте подачу, а не неадекватно ;) Расслабьтесь, это всего лишь форум.

В Питоне, for ... in итерирует и словари (равно, как и в JS объекты) и списки (равно, как и в JS - массивы). Сейчас картина прояснилась?

Что-то осталось недопонятым?

hogart 13.08.2009 18:58

Цитата:

Сообщение от Dmitry A. Soshnikov
В Питоне, for ... in итерирует и словари (равно, как и в JS объекты) и списки (равно, как и в JS - массивы).

Не соглашусь. В приведенном вами коде хорошо видно, что итерация идет по списку, элементами которого являются ключи словаря:)

Мне непонятны две вещи.
* Почему я почти не слышу других мнений, кроме вашего;
* Зачем вы меня убеждаете итерировать массив for..in'ом?:)


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