Показать сообщение отдельно
  #1 (permalink)  
Старый 12.11.2014, 16:26
Новичок на форуме
Отправить личное сообщение для xaser Посмотреть профиль Найти все сообщения от xaser
 
Регистрация: 12.11.2014
Сообщений: 6

Как работает Function.prototype.call.call ?
Читаю документацию и не могу вкурить принцип работы. Например (1):
Function.prototype.call.call(function(){ alert('how it works?') })

Если взять просто call применительно к какому либо методу, то вроде бы все понятно:
например (2):
(function(){ alert(this) }).call({})

согласно документации для call (п. 15.3.4.4):
При вызове методом call объекта func с аргументом thisArg и необязательными аргументами arg1, arg2, и т.д.,выполняются следующие шаги:
...
4.Вернуть результат вызова внутреннего метода [[Call]] для func, передавая thisArg в качестве значения this и argList в качестве списка аргументов.

В (2) объектом func является анонимная ф-ия,
call вызывает [[Call]] у анонимной ф-ии, подменяя this пустым объектом.

в (1) объектом func является другой call,
call вызывает [[Call]] у call, подменяя this анонимной функцией. И вот что тут дальше происходит непонятно.

В п. 13.2.1
сказано:

При вызове внутреннего метода [[Call]] для объекта Function, называемого F, со значением this и списком аргументов выполняются следующие шаги:
...
2. Пусть result будет результатом вычисления FunctionBody, представляющим собой значение внутреннего свойства [[code]] для F. Если у F нет внутреннего свойства [[code]], или если его значение представляет собой пустое тело функции FunctionBody, то result равен (normal, undefined, empty).
...

Для (2) все понятно - тупо отрабатывает тело нашей функции.

Для (1) - ???

Последний раз редактировалось xaser, 12.11.2014 в 17:08.
Ответить с цитированием