Добавление метода Объекту в контексте window
Случай 1:
console.log( {}.toString() ) Случай 2: {}.toString() Почему во втором случае Синтаксическая ошибка, а в первом нет? Можно ли добавить свой метод объекту: Object.prototype.show=function(){console.log(this)}; // Использование: {key:0}.show()Почему-то для массива ошибки нет: [4,8,15].map(i=>console.log(i)) Хотя массив тоже объект |
Цитата:
Цитата:
В джава скрипт используют автомагическое приведение типов небольшой пример alert ("первый пример «{} » = " + eval ( "{}" ) + " . . . тип данных = "+ (typeof eval("{}" )) ); alert ("второй пример «+{}» = " + eval ("+{}") + " . . . тип данных = "+ (typeof eval("+{}")) ); alert ("третий пример «({})» = " + eval ("({})") + " . . . тип данных = "+ (typeof eval("({})")) ); |
Правильно ли я понимаю, что пока я не присвоил объект в какую-нибудь переменную, я не смогу применить свой метод?
А случай 1 работает потому что вызов {}.toString() становится параметром функции console.log, что равно присвоению. |
Цитата:
чтобы {} были объектом, выражение не должно начинаться с { например: ({}).toString() обернули в скобки, и жизнь наладилась. Похожая тема с функциями. Если выражение начинается с function, то это считается FD, иначе FE: https://learn.javascript.ru/function...on-declaration |
Спасибо, товарищи!
Тогда объясните пожалуйста как работает: console.log({}.toString()) Ведь сначала же выполнится выражение в скобках и уже потом отобразится в консоли. При этом в console.log объект не оборачивается в скобки. Вместо ({}).toString() там просто {}.toString() Это срабатывает и в консоли мы видим [object Object] Наверное для метода toString сделали исключение |
Скорее всего тут дело в области видимости!
В глобальной области не работает, так как интерпретатор определяет фигурные скобки как блок! Гениально |
Teamur,
"console.log({}.toString())" - это все выражение полностью. {} находится внутри выражения, а не вначале. Потому рассматривается как объект, а не блок действий. к области видимости никакого отношения не имеет. |
Alexandroppolus,
теперь я все понял! |
Часовой пояс GMT +3, время: 17:13. |