|
|
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Для примера, проверить наличие метода " URL.createObjectURL " можно 3 способами: Код: javascript 1. 2. 3. Но с объектами FileReader и FormData беда какая-то. Ни один из способов не работает. Например, нужно проверить наличие методов (которые гарантированно поддерживаются всеми современными браузерами): Код: javascript 1. 2. Как проверить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 18:45 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, проверить практически все что угодно можно с помощью метода обработки ошибок try-catch https://www.w3schools.com/js/js_errors.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 18:55 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
авторпроверить практически все что угодно можно с помощью метода обработки ошибок try-catchДля того, чтобы можно было проверить существование метода с помощью try...catch , нужно: а) подготовить тестовые (но реальные) данные для выполнения проверяемого метода (получить объект File , содержащий ссылку на реальный файл, либо создать объект FormData ) б) выполнить реальную команду путём вызова метода и передачи ему реальных данных в) различать типы ошибок, поскольку в процессе выполнения реальной команды могут быть сгенерированы ошибки, не связанные с НЕсуществованием метода В итоге все эти действия превращаются ни во что иное, как в "тяжёлую" заплатку, которую вряд ли кто реализовывает с целью решения сабжевой задачи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2017, 23:57 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02Для примера, проверить наличие метода " URL.createObjectURL " можно 3 способами: Код: javascript 1. 2. 3. Но с объектами FileReader и FormData беда какая-то. Ни один из способов не работает. Например, нужно проверить наличие методов (которые гарантированно поддерживаются всеми современными браузерами): Код: javascript 1. 2. Как проверить ? например так: Код: javascript 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2017, 23:21 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
можно не создавать объекты Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 05:52 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Да, тоже подумал про прототипы. Через прототипы работает нормально . В случае с URL проверку необходимо выполнять через объект URL , а не через его прототип (прототип имеет тип URLPrototype ), поскольку методы URL.createObjectURL() и URL.revokeObjectURL() прописаны в самом объекте URL , а в его прототипе отсутствуют: Код: javascript 1. 2. Но в случае с объектами FileReader и FormData - наоборот. Проверяемые методы присутствуют в их прототипах, но отсутствуют в самих объектах (не являются их собственными свойствами): Код: javascript 1. 2. Но здесь непонятно, почему обращение к этим методам непосредственно через сами объекты возвращает unfdefined , ведь при обращении к свойствам и методам объекта при отсутствии собственных методов должно производиться обращение к методам прототипов. Код: javascript 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 12:59 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, дык надо объект создать через new, чтобы в его прототип __proto__ записалась ссылка из prototype. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 14:32 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
дополню, skyANA У тебя путаница в понятиях между этим "The Window.URL property returns an object that provides static methods " цитата из MDN грубо говоря никакого new не надо Код: javascript 1. 2. 3. 4. 5. и этим Код: javascript 1. 2. 3. 4. 5. 6. инстанс которого создаётся через конструктор с помощью new а ты пытаешься сделать if(window.FileReader.readAsDataURL) - естественно что это лажа если есть желание разобраться, то очень советую прочитать, то что мне очень помогло для понимания, цикл статей http://dmitrysoshnikov.com/ecmascript/ru-javascript-the-core/ тем более что есть на русском ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2017, 16:04 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
авторНо в случае с объектами FileReader и FormData - наоборот. Проверяемые методы присутствуют в их прототипах, но отсутствуют в самих объектах (не являются их собственными свойствами)Да, здесь нужно поправиться: не " отсутствуют в самих объектах ", а " отсутствуют в функциях-конструкторах этих объектов " (а в самих объектах - присутствуют). Т.е. в случае с windows.URL.createObjectURL выполняется обращение к "статическому" свойству-функции " createObjectURL " функции-конструктора " windows.URL ". И поскольку FileReader и FormData являются функциями-конструкторами без статических методов, а методы " readAsDataURL() " и " append() " - это свойства-функции объектов-прототипов FileReaderPrototype и FormDataPrototype соответственно, то проверить наличие эти методов можно двумя способами: 1. Через прототип функций-конструкторов FileReader и FormData : Код: javascript 1. 2. 2. Через прототип объектов "классов" FileReader и FormData (объектов, созданных функциями-конструкторами FileReader и FormData ): Код: javascript 1. 2. Поскольку свойство "__proto__" стандартизовано только в ECMAScript 6 , плюс создание объектов - это лишняя трата ресурсов, то предпочтителен вариант №1 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 14:18 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02а в самих объектах - присутствуют Нет. Они определены в прототипе, ссылка на который копируется в __proto__ при создании объекта через new. И второй вариант - это уж перебор. Не вижу смысла обращаться напрямую к __proto__ после создания объекта, если уже можно обратиться напрямую к проверяемому методу. Тогда уж вариантом номер два должен быть тот, что выше предложил Тshаmil: 20592353 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 07:44 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
[quote автор]skyANACyrax_02а в самих объектах - присутствуют Нет. Они определены в прототипе, ссылка на который копируется в __proto__ при создании объекта через new.Строго говоря, да. Но под " в самих объектах - присутствуют " я имел ввиду видимость этих методов непосредственно из объектов А объявлены (и физически существуют/присутствуют) они, конечно, в прототипах. авторТогда уж вариантом номер два должен быть тот, что выше предложил Тshаmil: 20592353. Его вариант - это вообще без явного обращения к прототипам. Мои два варианта - с явным обращением к прототипу. Кстати мой 2-й вариант может иметь смысл (как альтернатива 1-му) в том случае, когда объект уже создан (для неких иных целей). При этом конструкция с " in " семантически более понятна и прозрачна, чем определение типа свойства-функции " typeof ... readAsDataURL ". Но имеет минусы (свойство " __proto__ " стандартизовано только в ECMAScript 6 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 15:55 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, а можете толком объяснить, зачем нужно явное обращение к __proto__ во втором случае? Код: javascript 1. 2. У меня на в консоли true , а у Вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 16:49 |
|
||
|
JS: Как проверить наличие метода в объектах FileReader и FormData ?
|
|||
|---|---|---|---|
|
#18+
skyANACyrax_02, а можете толком объяснить, зачем нужно явное обращение к __proto__ во втором случае? Код: javascript 1. 2. У меня на в консоли true , а у Вас?Согласен. К __proto__ обращаться вообще не нужно )) Т.е. имеем 2 варианта: Код: javascript 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 19:56 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39478488&tid=1444565]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 180ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...