改变this指向的方法

1、call方法

  • 语法:函数名.call(调用者,实参1…)
  • 作用:函数被借用时,会立即执行,并且函数体内的this会指向调用者(借用者)
  • 代码:
1  function fn(name, age) {
2    this.name = name;
3    this.age = age;
4    console.log(this == obj);    //==>true
5  }
6 ​
7  // 对象字面量
8  var obj = {};
9  fn.call(obj, '李四', 11);    //==>fn中的this指向obj

2 、apply方法

  • 语法:函数名.apply(调用者,[实参1,实参2,…]) ==>参数以数组的形式
  • 作用:函数被借用是,会立即执行,并且函数体内的this会指向调用者(借用者)
  • 代码:
1 function fn(name, age) {
2    this.name = name;
3    this.age = age;
4    console.log(this == obj);    //==>true
5  }
6 ​
7  // 对象字面量
8  var obj = {};
9  fn.call(obj, ['李四', 11]);  //==>fn中的this指向obj

3、 bind方法

  • 语法:函数名.bind(调用者,实参1…)
  • 作用:函数被借用时,不会立即执行,而是返回一个新的函数。需要自己手动调用新的函数。
  • 代码:
 1 function fn(name, age) {
 2    this.name = name;
 3    this.age = age;
 4    console.log(this == obj);    //==>true
 5  }
 6 ​
 7  // 对象字面量
 8  var obj = {};
 9  var newFn = fn.bind(obj, '李四', 11);
10  newFn();
11 // fn.bind(obj, '李四', 11)();

4 、使用

代码:

 1 //  this指向window
 2 var name = 'window';
 3 var obj = {name = 'obj'};
 4 setTimeout(function(){
 5     console.log(this.name); //==>输出window
 6 },2000)
 7 //  this指向obj
 8 var name = 'window';
 9 var obj = {name = 'obj'};
10 setTimeout(function(){
11     console.log(this.name); //==>输出obj
12 }.bind(obj),2000)   //  bind不会立即执行
  • 伪数组借用数组的push方法实现增加
  • 代码:
 1 var arr = [10,20,30,40];
 2 //  arr.push(50);   //  push为数组中的方法
 3 var obj = {
 4     0:10,
 5     1:20,
 6     2:30,
 7     3:40,
 8     length:4
 9 }
10 //  console.log(arr instanceof Array);  ==>true
11 //  console.log(obj instanceof Array);  ==>false
12 //  Array.prototype.push    ==>构造函数Array的原型中的push方法
13 Array.prototype.push.call(obj,50);  //  ==>改变push中this指向为obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值