Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавление метода Объекту в контексте window (https://javascript.ru/forum/misc/70132-dobavlenie-metoda-obektu-v-kontekste-window.html)

Teamur 13.08.2017 21:21

Добавление метода Объекту в контексте 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))

Хотя массив тоже объект

MallSerg 14.08.2017 00:03

Цитата:

Сообщение от Teamur
Хотя массив тоже объект

Чушь и бред

Цитата:

Сообщение от Teamur
Почему во втором случае Синтаксическая ошибка, а в первом нет?

Потому что у object есть метод .toString() а у undefined такого метода нет

В джава скрипт используют автомагическое приведение типов
небольшой пример
alert ("первый пример «{}  » = " + eval (  "{}" ) + " . . . тип данных = "+ (typeof eval("{}"  )) );
alert ("второй  пример «+{}» = " + eval ("+{}") + " . . . тип данных = "+ (typeof eval("+{}")) );
alert ("третий  пример «({})» = " + eval ("({})") + " . . . тип данных = "+ (typeof eval("({})")) );

Teamur 14.08.2017 00:21

Правильно ли я понимаю, что пока я не присвоил объект в какую-нибудь переменную, я не смогу применить свой метод?

А случай 1 работает потому что вызов {}.toString() становится параметром функции console.log, что равно присвоению.

Alexandroppolus 14.08.2017 01:37

Цитата:

Сообщение от Teamur
{}.toString();

тут прикол в том, что фигурные скобки рассматриваются не как объект, а как "блок действий" - https://javascript.ru/Blok

чтобы {} были объектом, выражение не должно начинаться с {
например:
({}).toString()

обернули в скобки, и жизнь наладилась.

Похожая тема с функциями. Если выражение начинается с function, то это считается FD, иначе FE: https://learn.javascript.ru/function...on-declaration

Teamur 14.08.2017 18:23

Спасибо, товарищи!
Тогда объясните пожалуйста как работает:
console.log({}.toString())


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

При этом в console.log объект не оборачивается в скобки.
Вместо ({}).toString()
там просто {}.toString()
Это срабатывает и в консоли мы видим [object Object]

Наверное для метода toString сделали исключение

Teamur 14.08.2017 18:28

Скорее всего тут дело в области видимости!
В глобальной области не работает, так как интерпретатор определяет фигурные скобки как блок!

Гениально

Alexandroppolus 14.08.2017 18:35

Teamur,

"console.log({}.toString())" - это все выражение полностью.
{} находится внутри выражения, а не вначале. Потому рассматривается как объект, а не блок действий.

к области видимости никакого отношения не имеет.

Teamur 14.08.2017 18:57

Alexandroppolus,
теперь я все понял!


Часовой пояс GMT +3, время: 17:13.