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

 

版权声明:本文为it-xiong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/it-xiong/p/11212875.html