ÐÑовеÑка ÑинÑакÑиÑа
Ðаким бÑÐ´ÐµÑ ÑезÑлÑÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑого кода?
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)()
P.S. ÐдеÑÑ ÐµÑÑÑ Ð¿Ð¾Ð´Ð²Ð¾Ñ :)
ÐÑибка!
ÐопÑобÑйÑе запÑÑÑиÑÑ:
let user = {
name: "John",
go: function() { alert(this.name) }
}
(user.go)() // оÑибка!
СообÑение об оÑибке в болÑÑинÑÑве бÑаÑзеÑов не даÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ, ÑÑо же поÑло не Ñак.
ÐÑибка поÑвлÑеÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо ÑоÑка Ñ Ð·Ð°Ð¿ÑÑой пÑопÑÑена поÑле user = {...}.
JavaScript не вÑÑавлÑÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑоÑÐºÑ Ñ Ð·Ð°Ð¿ÑÑой пеÑед кÑÑглой Ñкобкой (user.go)(), поÑÑÐ¾Ð¼Ñ ÑиÑÐ°ÐµÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´ Ñак:
let user = { go:... }(user.go)()
ТепеÑÑ Ð¼Ñ Ñоже можем ÑвидеÑÑ, ÑÑо Ñакое обÑединÑнное вÑÑажение ÑинÑакÑиÑеÑки ÑвлÑеÑÑÑ Ð²Ñзовом обÑекÑа { go: ... } как ÑÑнкÑии Ñ Ð°ÑгÑменÑом (user.go). Ð ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² Ñой же ÑÑÑоÑке Ñ Ð¾Ð±ÑÑвлением пеÑеменной let user, Ñ.е. обÑÐµÐºÑ user еÑÑ Ð´Ð°Ð¶Ðµ не опÑеделÑн, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ Ð¾Ñибка.
ÐÑли Ð¼Ñ Ð²ÑÑавим ÑоÑÐºÑ Ñ Ð·Ð°Ð¿ÑÑой â вÑÑ Ð·Ð°ÑабоÑаеÑ:
let user = {
name: "John",
go: function() { alert(this.name) }
};
(user.go)() // John
ÐбÑаÑиÑе внимание, ÑÑо кÑÑглÑе Ñкобки вокÑÑг (user.go) ниÑего не знаÑаÑ. ÐбÑÑно они опÑеделÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð¾Ð¿ÐµÑаÑий (опеÑаÑÐ¾Ñ Ð³ÑÑппиÑовки), но здеÑÑ Ð²Ñзов меÑода ÑеÑез ÑоÑÐºÑ . ÑÑабаÑÑÐ²Ð°ÐµÑ Ð¿ÐµÑвÑм в лÑбом ÑлÑÑае, поÑÑÐ¾Ð¼Ñ Ð³ÑÑппиÑовка ни на ÑÑо не влиÑеÑ. ТолÑко ÑоÑка Ñ Ð·Ð°Ð¿ÑÑой Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение.