Природа связанных функций 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)(), Оказывается, что оператор вызова функции оглядывается на то, что является контекстом. Я ожидаю, что оператор не знает, откуда берутся операнды.

Кто-нибудь может правильно объяснить это поведение?

Ответы на вопрос(3)

Ваш ответ на вопрос