上一节我们学习了JS中的严格模式,本节我们将详细讲解JS中的"this"关键字。那什么是this呢?简单来说,this就是一个指向当前执行上下文对象的引用,它的值取决于函数的调用方式。

通常情况下,this的指向主要分为以下几种情况:

1. 全局环境中的 this指向浏览器中的window。

<script>
console.log(this); // 在浏览器中指向 window 对象
</script>

2. 函数中的 this指向普通函数调用:

<script>
function showThis() {
    console.log(this); // 非严格模式指向 window,严格模式为 undefined
}
showThis();
</script>

3. 构造函数中的 this指向新创建的对象:

<script>
function Web(address) {
    this.address = address; // this 指向新创建的对象
    this.getAddress = function() {
        console.log('编程学习网址:' + this.address);
    };
}
const web1 = new Web('dotcpp.com');
web1.getAddress(); // '编程学习网址:dotcpp.com'
</script>

那么怎么改变this指向呢?

我们可以通过call、apply和bind。

call(无数个参数):(call()里面的第一个参数为this所指对象

 function f()
  {
    console.log(this);//指向window
  }
  f.call(document);//更改指向为document

apply(第一个参数为this所指对象,第二个参数是数组):

<script>
  function f()
  {
    console.log(this);//指向window
  }
  f.apply(document,[]);//更改指向为document
</script>

bind(无数个参数):

<script>
function f() {
    console.log(this); // 指向绑定的对象
}
// 使用 bind 创建新函数
const boundFunc = f.bind(document);
// 稍后调用
boundFunc(); // 输出:#document
</script>

区分:call和bind归为一类,都是无数个参数且第一个参数为this指向对象,只是call是立即调用,一次性使用;而bind是返回新函数,可以重复调用;apply有两个固定参数,第一个参数是this指向对象,第二个必须是一个数组。

总结:理解this的指向规则对于编写正确的JS代码至关重要,读者需要勤于练习,扎实基础。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)