objectA.apply(this, arguments)
与
objectA.apply(null, arguments)
这两种写法有什么区别,我在自己写个demo 两个不会出exception,这使为什么呢?
首先 apply 不是 ES6 的内容,在 ES3 就可以使用了。 其次 apply 并不在 Object 的原型里,而在 Function 的原型里,如果是 object.apply 的话事实上会报一个 not a function 错误。在 ECMA-262 中规定,调用 apply 的函数不仅只是一个函数,还必须是一个 isCallable 的函数,例如一个 class 虽然是函数但也不能用 apply。 而楼主问的 apply 传入第一个参数的区别就更简单了,它是用来改变运行时 this 的指向的。 考虑如下代码:
apply
Object
Function
object.apply
not a function
isCallable
class
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 谢谢
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
首先
apply不是 ES6 的内容,在 ES3 就可以使用了。 其次apply并不在Object的原型里,而在Function的原型里,如果是object.apply的话事实上会报一个not a function错误。在 ECMA-262 中规定,调用apply的函数不仅只是一个函数,还必须是一个isCallable的函数,例如一个class虽然是函数但也不能用apply。 而楼主问的apply传入第一个参数的区别就更简单了,它是用来改变运行时this的指向的。 考虑如下代码:实际不存在this为null的情况,该值会被隐式转换为全局对象.在你确定this为global(window引用它)女区别
来自酷炫的 CNodeMD
@yuche 谢谢
@5196666qwe 谢谢