Zeroglif, да, конечно, расширять, я неверно выразился.
Цитата:
Цитата:
|
В общем, как всегда на этом форуме, — получил кучу очевидных ответов и туманных общих замечаний, и ничего нового. Печально, господа.
Неужели мы тут только для того, чтобы высокомерно отвечать новичкам, которые не то что JS, русского языка-то не знают? |
hogart, почему туманных? Здесь были и конкретные ответы/советы. Можно ещё раз:
Цитата:
Цитата:
- конфликт имён (подключение нескольких библиотек, но здесь - не важно - в прототипе описано или нет - в двух фреймворках может быть и две глобальные переменные, как, например, $); - в идеале, нужна документация для других программистов; - расширять Object.prototype не следует; - расширять Array.prototype можно, но тогда будет ограничение на итерацию по массивам через for ... in (либо, использовать в паре с .hasOwnProperty, либо "индексный" цикл (for var k = 0; k < .. ; k++), либо методы типа .forEach). Что смущает? |
Dmitry A. Soshnikov, ага, вот это уже лучше. Давайте обсудим.
Цитата:
Но, например, Python — тоже динамический язык, и в нем точно так же можно дополнять/менять поведение встроенных типов, но там это считается дурным тоном — и есть типы, аналогичные встроенным, но предназначенные для наследования/переопределения. Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
И опять таки — расширение встроенных классов запрещено на уровне языка. Хотя большинство питонистов все-таки более сознательны, чем люди, приходящие в JS. Цитата:
Цитата:
|
hogart,
Я, например, не вижу задач, которые бы рационально было решать с помощью расширения прототипов встроенных объектов. Ну, возможно, кроме маленьких вспомогательных методов, вроде last(), или методов для обеспечения кросс-браузерности. Я бы не хотел встретиться в коде с такой конструкцией: var a = []; a.loadDOMNodes("div.someclass"); Даже если будет один фреймворк в проекте. |
Цитата:
Цитата:
Цитата:
И ещё, в JS (с версии 1.7) достпен Array comprehensions (который позаимствован из Питона), и там используется синтаксис for / for each ... in: var evens = [i for each (i in [1, 2, 3, 4]) if (i % 2 == 0)]; Андрей Параничев, мне кажется, вторая запись более наглядна, определяет сразу принадлежность метода, нежели первая, глобальная функция: - removeFromArray(array, object); - array.remove(object); А если, ещё назовут не removeFromArray а просто remove - думай потом, к чему этот remove относится (но это уже, конечно, мифический случай)? |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 21:17. |