zoukankan      html  css  js  c++  java
  • js中call、apply、bind的区别

    call

    call 函数上的公共方法,主要是用来改变this

    • call的第一个参数,改变call前面函数中的this
    • 让call前面的函数执行
    • call方法中第二个及第二个以后的参数作为实参传给call前面的这个函数
    function a(){
        console.log(this)  // A 
        console.log(arguments) // [1,2,3] 这里说明下arguments是一个类数组,他有length有索引,但是不能使用数组的方法
      }
      a.call('A',1,2,3)
    
    function a(){
        this.A=1
      }
      function b(){
        a.call(this)
      }
      let c = new b()
      console.log(c.A)  // 1
    

    我们可以使用call改变父类的this,实现函数b继承函数a的私有属性

    apply

    apply和call方法使用一样。唯一不同的是,第二个参数传入的是一个数组,让apply前面的这个函数执行的时候是依次传入进去

    function a(q,w,e){
        console.log(this)  // A 
        console.log(q,w,e) // 1 2 3
      }
      let arr =[1,2,3]
      a.apply('A',arr)
    

    bind

    bind和call一样。唯一不同的是bind不会执行函数,且会返回一个改变this后的新的函数。我们可以利用这个特性克隆函数

     function a(){
         this.name='AAA'
      }
      let c = a.bind(null)
      console.log(c) // ƒ a
    
  • 相关阅读:
    S3:代理模式 Proxy
    S2:外观模式 Facade
    S1:适配器 Adapter
    C5:单例模式 Singleton
    C4:原型模式 Prototype
    C3:建造者模式 Builder
    C2:抽象工厂 Abstract Factory
    C1:工厂模式 Factory
    设计模式分类
    数据访问对象模式
  • 原文地址:https://www.cnblogs.com/mengxiangji/p/10403640.html
Copyright © 2011-2022 走看看