JS基础之this篇

this指向

相信this肯定很多人都会用,但是真要让自己去说this在什么情况下指向什么地方,可能就会有点迷糊。下面来一一列举一下。

  • 在方法中使用时,this —> 所有者对象
  • 单独使用时, this —> 全局对象
  • 在函数中使用时,this —> 全局对象
    注意: 如果启用了严格模式(use strict) 那么this就变成了undefined
  • 在事件中使用时,this —> 接收事件的元素
    call 和 apply 可以改变this的指向,后面我们再说它

在方法中

1
2
3
4
5
6
7
8
var obj = {
a: 1,
b: function (){
return this.a
// 这里的this是指向所有者对象也就是obj
// this.a === obj.a
}
}

单独使用时

1
2
var a = this;
// this指向window

在函数中

1
2
3
4
5
6
7
8
9
10
function Fun() {
return this;
// 这里this是指向全局对象也就是window
}
// 如果是在严格模式下就是不一样的情况
"use strict";
funtion Fun() {
return this;
// 返回的是未定义的 undefined
}

在事件中

1
2
3
4
5
<button onclick="btn">按钮</button>
function btn(){
this.innerHTML = '我不想叫按钮了~'
// 这里的this是指向button这个元素的
}

call() 和 apply()

首先他们的功能其实是一样的,不同点在于传参方式不一样。

他们都可以改变this的指向,调用一个对象的一个方法,用另一个对象替换当前的对象。

1
2
obj1.call(obj2, args1,args2, ... argsN)
obj1.apply(obj2, [args1, args2, ... argsN])

就是让obj2 调用 obj1 的方法,后面是传的参数

这里还有一个小技巧,可以通过apply去找出数组中的最大值最小值

1
2
Math.max.apply(null, arr);  // 这就能找出arr数组中的最大值
Math.min.apply(null, arr); // 这就能找出arr数组中的最小值
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2020 Mr·Huang

请我喝杯咖啡吧~

支付宝
微信