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 等等!
  • 相关阅读:
    DS博客作业--线性表
    c博客06-2019-结构体&文件
    C语言博客作业03--函数
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业2--线性表
    c博客06-结构体&文件
    C语言博客作业—2019-指针
  • 原文地址:https://www.cnblogs.com/wanguofeng/p/10725032.html
Copyright © 2011-2022 走看看