apply ,call,bind的区别

apply ,call,bind的区别

bind是返回 原函数的副本,改变的是副本的this指向

call() 在调用的时候临时修改this 返回结果是 2个值

obj1.say.call(window, 1, 2) 传多少参就按顺序写下去

apply() obj1.say.apply(window, [1, 2]) 返回结果是 2个值

call和apply这两个方法作用是一样的,如果有参数传参不一样

 var btn =document.querySelector("button");
       var obj = {
           name:'张宇',
           say:function(){
              this.style.background = "red";
              console.log(arguments); //Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]              
          }
      }  
       obj.say.call(btn,1,2)

call的参数直接挨个传递即可,apply后面的参数要放到一个数组里来传递

bind() bind是在函数封装的时候来修改this指向,这种的话以后的调用this都指修改过后的this指向

var btn =document.querySelector("button");
       var obj = {
           name:'张宇',
           say:function(){
              this.style.background = "red";
              console.log(arguments); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]              
          }
      }  
     obj.say.bind(btn,1,2,3)()

bind是返回 原函数的副本,改变的是副本的this指向

以上三种方式皆可以改变this的指向 (面试题)

不过一般现在不用这三种方式,因为有了箭头函数

posted @ 2020-07-02 20:40  里拉米苏  阅读(69)  评论(0编辑  收藏  举报