ES6 apply()。
发布于 7 年前 作者 spursy 4554 次浏览 来自 问答
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

回到顶部