В настоящее время нет никакого способа узнать, работаете ли вы с симулятора в JS.
Я бы предложил добавить условное TARGET_IPHONE_SIMULATOR
для проверки вашего нативного кода (если вы написали свой собственный модуль). Или, может быть, использовать сторонний модуль, который не рендерит камеру, если в симуляторе ... т.е. utf8 =% E2% 9C% 93 & амп; д = TARGET_IPHONE_SIMULATOR
Теперь существует Object.defineProperty
как общий способ расширения прототипов объектов без перечисления новых свойств, хотя я все равно не стал бы использовать это как оправдание для расширения ] встроенных типов , потому что даже помимо for..in
все еще существует вероятность других конфликтов с другими скриптами. Представьте, что кто-то использует две платформы Javascript, которые пытаются расширить массив аналогичным образом и выбирают одно и то же имя метода. Или представьте, что кто-то разветвляет ваш код, а затем помещает исходную и разветвленную версии на одну страницу. Будут ли кастомные улучшения объекта Array работать по-прежнему?
Такова реальность с Javascript, и почему вам следует избегать изменения прототипов встроенных типов даже с помощью Object. defineProperty
. Определите свои собственные типы с помощью собственных конструкторов.
Вы , так сказать, дополнили универсальные типы. Вы, вероятно, перезаписали некоторые другие функции библиотеки, и поэтому она перестала работать.
Предположим, что какая-то библиотека, которую вы используете, расширяет массив с помощью функции Array.remove (). После загрузки библиотеки вы также добавляете remove () к прототипу Array, но с вашей собственной функциональностью. Когда lib вызовет вашу функцию, она, вероятно, будет работать иначе, как ожидалось, и прервет ее выполнение ... Вот что здесь происходит.
В общем, возиться с основными объектами javascript - плохая идея. Вы никогда не знаете, что могут ожидать какие-либо сторонние библиотеки, и изменение основных объектов в javascript меняет их для всего.
Если вы используете Prototype, это особенно плохо, потому что прототип также мешает с глобальной областью видимости, и трудно сказать, столкнется или нет.