Добавление метода Объекту в контексте 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, время: 11:36. |