任何人都知道为什么在 javascript 中这有效
m = Math.max
m.apply(null, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
但这不是吗?
m = Math.max.apply
m(null, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
它抛出异常:
TypeError:Function.prototype.apply 在 undefined 上被调用,这是一个 undefined 而不是一个函数
根据规格
- 如果 IsCallable(func) 为 false,则抛出 TypeError 异常。
funcapply是调用其方法的对象。
apply允许您指定后者的上下文function,这undefined在您的情况下是因为m没有函数上下文(应该在参数中指定)。
由于争论
未捕获的类型错误:在未定义上调用 Function.prototype.apply,这是未定义的而不是函数
您可以通过尝试以下方法来测试这一点
示例1:
m = Math.max.apply.bind(this)
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
未捕获的 TypeError:Function.prototype.apply 被调用,它是一个对象而不是函数
示例2:
m = Math.max.apply.bind(null)
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
未捕获的类型错误:在 null 上调用 Function.prototype.apply,这是一个对象而不是函数
示例 3:(由于指定了函数上下文,因此不会出现错误)
m = Math.max.apply.bind(function(){})
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
不明确的
示例 4:(最后这会给你想要的输出)
m = Math.max.apply.bind(Math.max)
m(this, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
3
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |