簡明瞭解apply()和call()

apply()和call()都是ES6語法的,而且都是函數的方法。數組

function foo() {
    alert(this.name)
}
var obj = {
    name: '小明'
}
foo() // undefine

這裏this指向的是window。app

function foo() {
    alert(this.name)
}
var obj = {
    name: '小明',
    fn: foo
}
obj.fn() // 小明

這裏this指向的是obj。函數

可是如今我不想改變obj的數據,我要怎麼實現呢?this

function foo() {
    alert(this.name)
}
var obj = {
    name: '小明'
}
foo.apply(obj) //小明
foo.call(obj) //小明

上面就是利用了apply()或者call()。spa

那實際開發中,有哪些地方用到呢?code

好比如今咱們要獲取數組中的最小值。blog

使用Math.max()這個方法,可是它接收的參數是數組以逗號分隔開的形式的。開發

alert(Math.max(1,2,3)) // 3

很明顯,上面這種應該不是咱們想要的結果,這時候,就可使用咱們的apply()了。io

var arr = [1, 3, 2]
alert(Math.max.apply(window, arr)) // 3
相關文章
相關標籤/搜索