简明了解apply()和call()
apply()和call()都是ES6语法的,并且都是函数的方法。
function foo() { alert(this.name) } var obj = { name: '小明' } foo() // undefine
这里this指向的是window。
function foo() { alert(this.name) } var obj = { name: '小明', fn: foo } obj.fn() // 小明
这里this指向的是obj。
但是现在我不想改变obj的数据,我要怎么实现呢?
function foo() { alert(this.name) } var obj = { name: '小明' } foo.apply(obj) //小明 foo.call(obj) //小明
上面就是利用了apply()或者call()。
那实际开发中,有哪些地方用到呢?
比如现在我们要获取数组中的最小值。
使用Math.max()这个方法,但是它接收的参数是数组以逗号分隔开的形式的。
alert(Math.max(1,2,3)) // 3
很明显,上面这种应该不是我们想要的结果,这时候,就可以使用我们的apply()了。
var arr = [1, 3, 2] alert(Math.max.apply(window, arr)) // 3
疯狂的程序员决不是靠狂妄和拼命的程序员,而是能够脚踏实地,持续努力的程序员,一个程序员真正做到这两点,技术上去后,唯一能限制他的只有想象力,到那个时候才算“疯狂的程序员”,这种程序员,才能令对手无比恐惧。

浙公网安备 33010602011771号