Начиная от основного материала,
Что такое .call
? его функция доступна внутри Function.prototype
. Чтобы его можно было вызвать на любую функцию, именно поэтому вы можете позвонить a.call
.
Теперь, что делает .call
? он устанавливает this
контекст функции, которую вы назвали .call
. поэтому в вашем случае, когда вы вызываете a.call
, он может установить контекст this
на функцию a
(через первый параметр, который вы передаете функции .call
).
что такое this
внутри .call
функция? это не что иное, как функции вы назвали .call
на (в вашем случае a
)
так для простоты вы предполагаете, внутри .call
может быть вызовом функции, как this()
(и что нет ничего, кроме вызова a()
) - до сих пор так хороший
на ваш вопрос
a.call.call
, что здесь происходит? второй .call
(я рассчитываю слева направо) вызывает сначала .call
и устанавливает this
для первого .call
, который является не чем иным, как первым параметром, который является функцией.
сейчас первый .call
будет звонить this()
(помните, что это задано вторым .call
, и это первый парам, который вы прошли, и это функция).
Надеюсь, я мог бы объяснить, что я хотел объяснить.
позвольте мне рассказать, почему вы запутались с a.call.call
. это потому, что вы думаете, где моя функция a
ушла во все это замешательство? , которая на самом деле не участвует, как только года называют второй .call
(здесь this
к первому .call
исходят от второго .call
, что делает вашу функцию a
устаревших в этом случае)
в вас дело .call.call
должны были призваны на Function.prototype
или Object
или любой другой функции (помните .call
является частью Function.prototype
и может быть вызван любой функции)
так что вы должны были сделать
Function.prototype.call.call(...)
или даже
Object.call.call(...)
Теперь я был смущен о них вещи на прошлой неделе (не .call.call
но .call.bind
), я задал вопрос здесь, и кто-то объяснил мне очень подробно, вы можете найти его HERE
Я попытался ответить из своего понимания из вопроса, который я задал.
после того, как все это то, что SO для
UPDATE:
вас вопрос «Похоже, что b.call (такой же, как a.call.call) звонит первый аргумент, который функцию, затем передайте второй аргумент как это.Если первый аргумент не является функцией, то бросайте не ошибку функции. "
ваше предположение верно здесь
«[Военачальники документации] (http://meta.stackoverflow.com/q/303865/419956)« a.k.a. «NullReference» еще не существует, до тех пор ваш вопрос, вероятно, слишком широк. До тех пор я бы рекомендовал другие ресурсы, такие как [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/call). – Jeroen
@jeroen Я уже читал, что doc на MDN, но это только объясняет, как работает функция 'call', и приводятся некоторые примеры. То, что я точно спрашиваю здесь, это 'call.call', поведение которого отличается от' call'. И я не могу получить работу за «call.call». – tjfdfs
Первый аргумент '.call()' - это объект, который вы хотите установить как значение 'this' в функции, для которой' call() 'должен работать. Если 'call()' сама является функцией, которой нужно управлять, потому что вы привязали '.call.call()', что она делает с предоставленным значением 'this'? Он предполагает, что это функция и пытается ее называть. Но ваша последняя строка кода не передает функцию, она передает пустой объект. – nnnnnn