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 谢谢