zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    新的开始——3.3
    第一个周末——3.2
    恋爱知识大增——周五3.1
    相安无事——周四2.28
    好几天没写了。。。——周三2.27
    开学第二天——2.26
    开学第一天——2.25
    华为
    微软 Microsoft
    谷歌 google
  • 原文地址:https://www.cnblogs.com/codexlx/p/12485338.html
Copyright © 2011-2022 走看看