добавление пользовательских функций в Array.prototype

В настоящее время нет никакого способа узнать, работаете ли вы с симулятора в JS.

Я бы предложил добавить условное TARGET_IPHONE_SIMULATOR для проверки вашего нативного кода (если вы написали свой собственный модуль). Или, может быть, использовать сторонний модуль, который не рендерит камеру, если в симуляторе ... т.е. utf8 =% E2% 9C% 93 & амп; д = TARGET_IPHONE_SIMULATOR

49
задан Angel Politis 22 September 2016 в 12:38
поделиться

3 ответа

defineProperty ?

Теперь существует Object.defineProperty как общий способ расширения прототипов объектов без перечисления новых свойств, хотя я все равно не стал бы использовать это как оправдание для расширения ] встроенных типов , потому что даже помимо for..in все еще существует вероятность других конфликтов с другими скриптами. Представьте, что кто-то использует две платформы Javascript, которые пытаются расширить массив аналогичным образом и выбирают одно и то же имя метода. Или представьте, что кто-то разветвляет ваш код, а затем помещает исходную и разветвленную версии на одну страницу. Будут ли кастомные улучшения объекта Array работать по-прежнему?

Такова реальность с Javascript, и почему вам следует избегать изменения прототипов встроенных типов даже с помощью Object. defineProperty . Определите свои собственные типы с помощью собственных конструкторов.

48
ответ дан 7 November 2019 в 11:37
поделиться

Вы , так сказать, дополнили универсальные типы. Вы, вероятно, перезаписали некоторые другие функции библиотеки, и поэтому она перестала работать.

Предположим, что какая-то библиотека, которую вы используете, расширяет массив с помощью функции Array.remove (). После загрузки библиотеки вы также добавляете remove () к прототипу Array, но с вашей собственной функциональностью. Когда lib вызовет вашу функцию, она, вероятно, будет работать иначе, как ожидалось, и прервет ее выполнение ... Вот что здесь происходит.

1
ответ дан 7 November 2019 в 11:37
поделиться

В общем, возиться с основными объектами javascript - плохая идея. Вы никогда не знаете, что могут ожидать какие-либо сторонние библиотеки, и изменение основных объектов в javascript меняет их для всего.

Если вы используете Prototype, это особенно плохо, потому что прототип также мешает с глобальной областью видимости, и трудно сказать, столкнется или нет.

1
ответ дан 7 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: