zoukankan      html  css  js  c++  java
  • js call().apply().bind()的用法

    function Person(age) {
          this.age = age;
        }
        Person.prototype.sayHi = function (x, y) {
          console.log((x + y) + ":====>" + this.age); //是实例对象
        };
    
        function Student(age) {
          this.age = age;
        }
        var per = new Person(10); //实例对象
        var stu = new Student(100); //实例对象
        //sayHi方法是per实例对象的
        per.sayHi.apply(stu, [10, 20]);//30:====>100
        per.sayHi.call(stu, 10, 20);//30:====>100
    apply和call的使用方法:
      1,apply的使用语法
          函数名字.apply(对象,[参数1,参数2,...]);
          方法名字.apply(对象,[参数1,参数2,...]);
      2,call的使用语法
          函数名字.call(对象,参数1,参数2,...);
          方法名字.call(对象,参数1,参数2,...);
     
      作用:改变this的指向,只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法改变this的指向
      不同的地方:参数传递的方式是不一样的
     
    function Person(age) {
          this.age=age;
        }
        Person.prototype.play=function () {
          console.log(this+"====>"+this.age);
        };
    
        function Student(age) {
          this.age=age;
        }
        var per=new Person(10);
        var stu=new Student(20);
        //复制了一份
        var ff=per.play.bind(stu);
        ff();
    bind是用来复制一份
    使用的语法:
      函数名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个函数
      方法名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个方法
    bind 返回的是一个新的函数,你必须调用它才会被执行
     
    总结:
       call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
      call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.myFun.call(对象,参数1,参数2,...);
        apply的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(对象,[参数1,参数2,...]);
        bind除了返回是函数以外,它 的参数和call 一样。
     
      当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等!
  • 相关阅读:
    李航统计学习方法(第二版)(六):k 近邻算法实现(kd树(kd tree)方法)
    ActiveMQ的安装和启动
    HTML select autofocus 属性
    macpath (File & Directory Access) – Python 中文开发手册
    Java Bitset类
    Linux zip命令
    HTML DOM Keygen 对象
    tanh (Numerics) – C 中文开发手册
    no-shadow (Rules) – Eslint 中文开发手册
    require-await (Rules) – Eslint 中文开发手册
  • 原文地址:https://www.cnblogs.com/wanguofeng/p/10725032.html
Copyright © 2011-2022 走看看