ES6 apply()。
objectA.apply(this, arguments)
与
objectA.apply(null, arguments)
这两种写法有什么区别,我在自己写个demo 两个不会出exception,这使为什么呢?
4 回复
首先 apply 不是 ES6 的内容,在 ES3 就可以使用了。
其次 apply 并不在 Object 的原型里,而在 Function 的原型里,如果是 object.apply 的话事实上会报一个 not a function 错误。在 ECMA-262 中规定,调用 apply 的函数不仅只是一个函数,还必须是一个 isCallable 的函数,例如一个 class 虽然是函数但也不能用 apply。
而楼主问的 apply 传入第一个参数的区别就更简单了,它是用来改变运行时 this 的指向的。
考虑如下代码:
var name = 'wallace'
function func() {
console.log(this.name)
}
func.apply(null) // 打印 `global`(node) 或 `window`(browser) 的 name,也就是 `wallace`
func.apply(Number) // 打印 `Number` 的 `name`
实际不存在this为null的情况,该值会被隐式转换为全局对象.在你确定this为global(window引用它)女区别
来自酷炫的 CNodeMD
@yuche 谢谢
@5196666qwe 谢谢