美文网首页
call、apply、bind

call、apply、bind

作者: 清苑折纸 | 来源:发表于2020-08-28 11:08 被阅读0次

    call、apply、bind都可以改变函数的执行上下文,换句话说就是都可以改变函数的this指向

    call()

    call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。当第一个参数为null、undefined的时候,默认指向window。
    语法:function.call(thisArg,arg1,arg2,arg3,....)

    var array = ['a', 'b'];
    var elements = [0, 1, 2];
    array.push.apply(array, 0,1,2);
    console.log(array); // ["a", "b", 0, 1, 2]
    

    在一个子构造函数中,你可以通过调用父构造函数的 call 方法来实现继承,使用call()可以提高代码的复用性,如下Product.call()使通过Toy构造函数创建的实例对象fun也拥有了name、price属性实现了继承

    function Product(name, price) {
      this.name = name
      this.price = price
    }
    function Toy(name, price) {
      Product.call(this, name, price)
      this.category = 'toy'
    }
    var fun = new Toy('robot', 40)
    

    apply()

    apply() 方法使用一个指定的 this 值和作为一个数组或类似数组对象提供的参数
    来调用一个函数。当第一个参数为null、undefined的时候,默认指向window。
    语法:func.apply(thisArg, [argsArray])

    var array = ['a', 'b'];
    var elements = [0, 1, 2];
    array.push.apply(array, elements);
    console.log(array); // ["a", "b", 0, 1, 2]
    

    bind()

    bind()创建一个新的函数,在bind()被调用时将函数内的this指向bind内的第一个参数
    语法:function.bind(thisArg[, arg1[, arg2[, ...]]])

    总结:

    1. call、apply、bind共同点是都可以改变函数内this指向
    2. call、apply、bind的第一个参数都指定函数内的this指向,call后面的参数可以为1个或者多个,apply的参数为一个数组,bind后为函数内传入的参数
    3. call、apply都是立即执行函数,bind为新建函数后等待调用再执行

    相关文章

      网友评论

          本文标题:call、apply、bind

          本文链接:https://www.haomeiwen.com/subject/hpgksktx.html