CNode

ES6 apply()。

问答
Sspursy发布于9 年前最后回复9 年前4 回复5195 浏览0 收藏
objectA.apply(this, arguments)

objectA.apply(null, arguments)

这两种写法有什么区别,我在自己写个demo 两个不会出exception,这使为什么呢?

查看回复

回复 (4)

Y
yuche#1·9 年前

首先 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`
Y
yviscool#2·9 年前

实际不存在this为null的情况,该值会被隐式转换为全局对象.在你确定this为global(window引用它)女区别

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录