Сборка от 17 марта 2017 г



Download 9,9 Mb.
bet324/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   320   321   322   323   324   325   326   327   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Проверка синтаксиса




Ошибка! Попробуйте:
var obj = {
go: function() { alert(this)
}
}

(obj.go)() // error!


Причем сообщение об ошибке в большинстве браузеров не даёт понять, что на самом деле не так.




Ошибка возникла из‑за того, что после объявления obj пропущена точка с запятой.

JavaScript игнорирует перевод строки перед скобкой (obj.go)() и читает этот код как:


var obj = { go:... }(obj.go)()


Интерпретатор попытается вычислить это выражение, которое обозначает вызов объекта { go: ... } как функции с аргументом (obj.go) . При этом, естественно, возникнет ошибка.

К условию





Почему this присваивается именно так?





  1. Обычный вызов функции в контексте объекта.




  1. То же самое, скобки ни на что не влияют.




  1. Здесь не просто вызов obj.method() , а более сложный вызов вида (выражение).method() . Такой вызов работает, как если бы он был разбит на две строки:

f = obj.go; // сначала вычислить выражение


f(); // потом вызвать то, что получилось

При этом f() выполняется как обычная функция, без передачи this .





  1. Здесь также слева от точки находится выражение, вызов аналогичен двум строкам.

В спецификации это объясняется при помощи специального внутреннего типа Reference Type . Если подробнее – то obj.go() состоит из двух операций:



  1. Сначала получить свойство obj.go .

  2. Потом вызвать его как функцию.

Но откуда на шаге 2 получить this ? Как раз для этого операция получения свойства obj.go возвращает значение особого типа Reference Type , который в дополнение к свойству go содержит информацию об obj . Далее, на втором шаге, вызов его при помощи скобок () правильно устанавливает this .




Любые другие операции, кроме вызова, превращают Reference Type в обычный тип, в данном случае – функцию go (так уж этот тип устроен).

Поэтому получается, что (method = obj.go) присваивает в переменную method функцию go , уже без всякой информации об объекте obj . Аналогичная ситуация и в случае (4) : оператор ИЛИ || делает из Reference Type обычную функцию.


К условию




Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   320   321   322   323   324   325   326   327   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish