欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js call().apply().bind()的用法

程序员文章站 2022-09-10 13:48:30
apply和call的使用方法: 1,apply的使用语法 函数名字.apply(对象,[参数1,参数2,...]); 方法名字.apply(对象,[参数1,参数2,...]); 2,call的使用语法 函数名字.call(对象,参数1,参数2,...); 方法名字.call(对象,参数1,参数2, ......
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 等等!