Loading

多种方式修改this的指向

1.修改this的指向

题目:

function () {
      var r = bindThis(function (a, b) {
          return this.test + a + b
      },       {test: 2}     )                     (2, 3);
      return r === 7;
}
  1. apply
   function bindThis(f, oTarget) {
       return function(){
           return f.apply(oTarget,arguments);
       } //外层的return目的是为了在调用bindThis函数时,直接进修改,f对应的时function(a,b){},oTarget对应的是{test:2}
   }
   
  1. bind
   function bindThis(f, oTarget) {
    return f.bind(oTarget)
   }//bind会自动返回绑定之后的函数,不需要嵌套return了,客观来说bind方法的效率会更高
  1. call
   function bindThis(f, oTarget) {
    return function() {
        return f.call(oTarget, ...arguments)
    }
   }

4.利用引用数据的特点

   function bindThis(f, oTarget) {
       return function(...args){
       //返回一个函数--封装;。。。arg用于将数据都接收到数组args中
           oTarget.f=f;
       //利用对象的方法中的this指向对象原理,将f中的this指向对象
           return oTarget.f(...args);//函数的最终结果返回函数指向结果。。。args将参数展开传入
       }
   }

apply,call,bind三者的区别

  • 三者都可以改变函数的this对象指向。
  • 三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局window。
  • 三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。
  • bind 是返回绑定this之后的函数,便于稍后调用;apply 、call 则是立即执行 。
posted @ 2021-05-26 20:58  大黄树  阅读(130)  评论(0)    收藏  举报