JavaScript之apply方法,call方法,bind方法

apply和call

作用:改变this的指向    不同的地方:参数传递的方式是不一样的

只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法改变this的指向

apply的使用语法


* 函数名字.apply(对象,[参数1,参数2,...]);
* 方法名字.apply(对象,[参数1,参数2,...]);


* call的使用语法


* 函数名字.call(对象,参数1,参数2,...);
* 方法名字.call(对象,参数1,参数2,...);
 

  function Person(age,name) {
      this.age=age;
      this.name=name;
    }
    //通过原型添加方法
    Person.prototype.sayHi=function (x,y) {
      console.log("你好啊:"+this.name);
    };
    function Student(sex,name) {
      this.name=name;
      this.sex=sex;
    }
    var stu=new Student("人妖","学生");
    var per=new Person(18,"梦婉");
    per.sayHi.apply(stu,[10,20]);//您好啊:学生
    per.sayHi.call(stu,10,20);//您好啊:学生
    per.sayHi.apply(null,[10,20]);//你好啊:
    per.sayHi.call(null,10,20);//你好啊:
    per.sayHi();//你好啊:梦婉

apply和call方法中如果没有传入参数,或者是传入的是null,那么调用该方法的函数对象中的this就是默认的window

bind方法

bind是用来复制一份的时候改变指向(apply和call是调用的时候改变指向)

函数名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个函数
方法名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个方法

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();

猜你喜欢

转载自blog.csdn.net/qq_41320857/article/details/81353509