Природа связанных функций JS и оператор вызова функции
var obj = {};
var r1 = (obj['toString'])();
var m1 = obj['toString'];
var r2 = m1();
var r3 = (obj.toString)();
var m2 = obj.toString;
var r4 = m2();
r1
а такжеr3
Ожидаемо содержать правильный результат:"[object Object]"
, в то время какr2
а такжеr4
содержать"[object Undefined]"
показывая чтоm1
а такжеm2
не связаны с объектом.
Я не могу полностью понять, какobj['toString']()
выполнен. Я всегда выглядел так,(obj['toString'])()
->(function obj)()
, Оказывается, что оператор вызова функции оглядывается на то, что является контекстом. Я ожидаю, что оператор не знает, откуда берутся операнды.
Кто-нибудь может правильно объяснить это поведение?