bind、call、apply 区别

in js with 0 comment views: 506 times

call 和 apply 都是为了解决改变 this 的指向。作用都是相同的,只是传参的方式不同。

除了第一个参数外,call 可以接收一个参数列表,apply 只接受一个参数数组。

bind 和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过 bind 实现柯里化。

let a = {
    value: 1
}
function getValue(name, age) {
    console.log(name)
    console.log(age)
    console.log(this.value)
}

Function.prototype.myCall = function(context){
    var context = context || window;
    context.fn = this;
    var args = [...arguments].slice(1)
    var result = context.fn(...args)
    delete context.fn;
    return result
}

Function.prototype.myApply = function(context){
    var context = context || window;
    context.fn = this;
    var result;
    if(arguments[1]){
        result = context.fn(...arguments)
    }else{
        result = context.fn()
    }
    delete context.fn;
    return result;
}

参考


Responses