• JS-10 (call/this/bind)


    三者的作用都是修改一个函数中的this

    一、call

     调用一个函数临时更换一次这个函数中的this为指定的对象。函数本次调用后,this恢复原样

    call做了三件事:

    (1)函数执行一次;

    (2)用自己的第一个实参对象,代替函数中的所有this

    (3)将从第二个实参值向后的所有实参值列表,传递给正在调用的函数的所有形参

    要调用的函数.call(替换this的对象, 实参值列表)
    

    二、apply

    如果实参值列表是放在一个数组中给的不是多个值分着给的。如果完成同样的替换this的功能,就要换成用apply()实现

    要调用的函数.apply(替换this的对象, 数组)
    

     三、bind

    基于原函数创建一个一模一样的函数副本永久替换函数副本中的this为指定的对象

    如果一个对象,总是拿别人的函数使用,代码会很繁琐

    var 新函数名=要调用的函数.bind(替换this的对象,固定实参值...)
    

    ①bind会基于原函数创建一个一模一样的新函数;

    ②bind会将新函数副本中的this永久替换为指定对象

    注意:回调函数中的this如果不是想要的,必须用bind

    ①不用call和apply是因为.call().apply()都是立刻执行函数的意思,而回调函数恰恰不希望立刻执行函数

    ②bind不会立即执行,而是返回一个新函数。

    var xlx={sname:'x_l_x'};
    //等2秒执行
    setTimeout(function(){ console.log(`我是${this.sname}`) }.bind(xlx) ,2000);
    //立即执行 setTimeout(function(){ console.log(`我是${this.sname}`) }.call(xlx) ,2000);
  • 相关阅读:
    CodeForces 1294B Collecting Packages(排序+贪心)
    计算系数(组合数)
    垒骰子(矩阵快速幂)
    蒜头君倒水(矩阵快速幂)
    Buy Tickets POJ
    Billboard HDU
    树状数组求逆序对 附HDU1394
    codeforces 1304D Shortest and Longest LIS
    codeforces 1301C Ayoub's function
    Codeforces 1301B Motarack's Birthday(二分)
  • 原文地址:https://www.cnblogs.com/codexlx/p/12485338.html
Copyright © 2020-2023  润新知