js中改变this的指向,有apply,call和bind这三种方法

这三个方法的主要目的都是改变this指针的指向。

apply和call都是在调用函数本身的同时把要付给this指针的对象传递进去,不过他两的语法不同。

  • apply的使用语法
    • 函数名字.apply(对象,[参数1,参数2,...]);
    • 方法名字.apply(对象,[参数1,参数2,...]);
  • call的使用语法
    • 函数名字.call(对象,参数1,参数2,...);
    • 方法名字.call(对象,参数1,参数2,...);
/函数的调用,改变this的指向
    //    function f1(x,y) {
    //      console.log((x+y)+":===>"+this);
    //      return "这是函数的返回值";
    //    }
    //    //apply和call调用
    //    var r1=f1.apply(null,[1,2]);//此时f1中的this是window
    //    console.log(r1);
    //    var r2=f1.call(null,1,2);//此时f1中的this是window
    //    console.log(r2);
    //    console.log("=============>");
    //    //改变this的指向
    //    var obj={
    //      sex:"男"
    //    };
    //    //本来f1函数是window对象的,但是传入obj之后,f1函数此时就是obj对象的
    //    var r3=f1.apply(obj,[1,2]);//此时f1中的this是obj
    //    console.log(r3);
    //    var r4=f1.call(obj,1,2);//此时f1中的this是obj
    //    console.log(r4);


//方法改变this的指向

    //    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]);
    //    per.sayHi.call(stu, 10, 20);

而bind则是复制函数并改变this指向

bin的使用语法

  • 函数名字.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();


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值