- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
这些代码在 chrome devtool 上运行。
好像b.call
(与 a.call.call
相同)调用第一个参数,它是一个函数,然后将第二个参数作为 this
传递.如果第一个参数不是函数,则抛出 not a function
错误。
谁能解释一下 <Function>.call.call
工作?
最佳答案
让我给你举个例子。
function a() { console.log(1) }
function b() { console.log(2) }
a.call(b) // 1
a.call.call(b) // 2
a.call.call.call(b) // 2
为什么?
我们知道 a.call(b)
表示使用 this 值 b
调用 a()
。
所以 a.call.call(b)
意味着用 this 值 b 调用 Function.prototype.call()
,与Function.prototype.call.call(b)
。
但是Function.prototype.call.call()
并不是一个普通的函数对象。它可以被调用,但它没有属性。有一些独特的规则来调用它。
Function.prototype.call.call(a) // 1
Function.prototype.call.call(b) // 2
事实上,Function.prototype.call.call(b)
是一个Exotic Object,而且是一个Bound Function Exotic Object。
[说明] 绑定(bind)函数是一个外来对象,它包装了另一个函数对象。
[说明] 调用绑定(bind)函数通常会导致调用其包装函数。
所以 Function.prototype.call.call(a)
就是 a()
。
a.call.call(x)
表示调用x,即x()
。
Function.prototype.call(thisArg)
中,如果thisArg未定义或为null,将被全局对象替换。a.call.call()
表示a.call.call(undefined)
表示a.call.call(window)
表示调用窗口
。
尝试调用 window
你会得到 Uncaught TypeError: window is not a function
,所以尝试调用 a.call.call()
你会得到 Uncaught TypeError: a.call.call is not a function
。
希望对您有所帮助。
关于javascript - a是一个函数,那么 `a.call.call`到底是做什么的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916477/
我是一名优秀的程序员,十分优秀!