精通JavaScript的this关键字

如何精通 JavaScript 的 this 关键字?

了解上下文

this 关键字的值取决于函数被调用时的上下文。在 JavaScript 中,上下文默认是全局对象,但在函数中,上下文可能会被更改。为了更好地了解 this 关键字,我们需要了解上下文是如何被定义和更改的。

示例一:默认上下文是全局对象,设置 this 的方式是使用函数调用绑定。

function logThis() {
  console.log(this); //默认情况下,this 指向全局对象
}

logThis(); // 输出:Window { ... }

示例二:通过对象调用函数,将函数绑定到该对象上,从而修改 this 的上下文。

const obj = {
  name: 'Hannah',
  logName() {
    console.log(this.name); // 此时,this 的上下文设置成了 obj 对象,输出:Hannah
  }
};

obj.logName();

理解 this 的四种绑定规则

当 this 作为函数的参数进行调用时,它的绑定方式可以分为四种情况。

  1. 默认绑定 - 当前上下文是全局对象或 undefined。
function logThis() {
  console.log(this); //默认情况下,this 指向全局对象
}

logThis(); // 输出:Window { ... }
  1. 隐式绑定 - 当前上下文是对象字面量或属性访问。
const obj = {
  name: 'Hannah',
  logName() {
    console.log(this.name); // this 被隐式绑定为 obj, 输出: Hannah
  }
};

obj.logName();
  1. 显式绑定 - apply 和 call 方法用来手动绑定 this 到函数中。
function logThis() {
  console.log(this);
}

const obj = { name: 'Hannah'};
logThis.call(obj); // 输出:{ name: 'Hannah' }
  1. new 绑定 - this 绑定到由构造函数新创建的对象。
function Person(name) {
  this.name = name;
}

const hannah = new Person('Hannah');
console.log(hannah.name); // 输出:Hannah

当 this 的值为 undefined

当 this 的值为 undefined 或 null 时,它会被默认绑定为全局对象。但在严格模式下, this 的值将保持 undefined。

function logThis() {
  console.log(this);
}

logThis.call(null); // 输出:Window { ... } 或者 undefined

箭头函数绑定 this

箭头函数的 this 值由上层作用域来决定。箭头函数没有自己的 this 值,它们继承父级作用域中的 this 值。

const obj = {
  name: 'Hannah',
  logName() {
    const f = () => {
      console.log(this.name); // this 继承自 obj, 输出: Hannah
    };

    f();
  }
};

obj.logName();

在学习 JavaScript 的 this 关键字时,这些知识点是必备的。通过理解上下文和绑定规则,我们可以更好地使用它,并避免出现无意中绑定 this 的错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:精通JavaScript的this关键字 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript Date toUTCString() 方法

    以下是关于JavaScript Date对象的toUTCString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toUTCString()方法 JavaScript的toUTCString()方法返回一个表示日期时间部分的字符串,该字符串格式根据国际标准时间(UTC)而定。该方法不接受任何参数。 下面是使用对象的toUTCSt…

    JavaScript 2023年5月11日
    00
  • BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)

    BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)攻略 BOM(Browser Object Model)提供了一些和浏览器本身相关的对象,在前端开发中常用的就是定时器。定时器提供了一种方式来在指定时间间隔内调用函数。 setInterval() 和 setTimeout() 在定时器应用中,最常使用的是 setInterval() 和 setTime…

    JavaScript 2023年6月11日
    00
  • js中通过split函数分割字符串成数组小例子

    JS中通过split函数分割字符串成数组,可以帮助我们方便地对字符串进行处理,下面我们来讲解具体的攻略: 步骤1:理解split()函数 split函数是JS中字符串的一个函数,用来分割字符串,将字符串分割成一个数组。在分割字符串时,我们可以指定一个分隔符,如空格、逗号、分号等等。 步骤2:编写示例代码 下面通过两个代码示例来讲解,具体内容如下: 示例一:分…

    JavaScript 2023年5月27日
    00
  • javascript ES6 新增了let命令使用介绍

    JavaScript ES6 新增了let命令使用介绍 在ES6之前,JavaScript中定义变量只有两种方式:var 和 window.xxx;ES6新增了let和const命令,增加了JavaScript定义变量的方式,let命令用于声明一个只在代码块内部可用的变量。 let命令基本用法 let 命令的用法与 var 完全相同,可以使用 let 命令声…

    JavaScript 2023年6月11日
    00
  • JavaScript实现计算圆周率到小数点后100位的方法示例

    首先我们需要知道如何计算圆周率。圆周率是一个无理数,用希腊字母π表示,它的值约为3.14159265358979323846。 对于JavaScript实现计算圆周率到小数点后100位的方法,我们可以使用莱布尼兹公式来完成,公式如下: π/4=1-1/3+1/5-1/7+1/9-1/11+… 其中,π是我们要求的圆周率。 在实现过程中,我们将公式求和10…

    JavaScript 2023年5月28日
    00
  • 千篇一律的JS运算符讲解,一起来看看

    千篇一律的JS运算符讲解,一起来看看 前言 JS运算符是编写JS代码时非常基本的一种语法。很多初学者在学习JS时可能会忽略这些运算符的学习,但却是非常重要的基础。在本篇文章中,我们将会全面讲解JS的运算符,并提供一些示例来帮助读者更好地理解这些内容。 算术运算符 运算符 描述 示例 + 加法 10 + 20 = 30 – 减法 20 – 10 = 10 * …

    JavaScript 2023年5月28日
    00
  • SUN的《AJAX与J2EE》全文译了

    好的。首先,要全文翻译 SUN 的《AJAX 与 J2EE》文档,需要先下载该文档,然后使用翻译软件或者通过人工翻译的方式进行翻译。在这个过程中,需要注意以下几点: 确认目标语言,比如翻译成中文、日文、韩文等等,同时需要尽可能保证翻译的准确性、专业性和流畅性。 在进行翻译时,需要考虑到 Markdown 格式的特点,比如代码块、标题、列表等等,需要在翻译中保…

    JavaScript 2023年6月11日
    00
  • 贴一个在Mozilla中常用的Javascript代码

    关于“贴一个在Mozilla中常用的Javascript代码”的完整攻略,我可以从以下方面进行详细讲解: 1. 熟悉 Mozilla 平台环境 在 Mozilla 平台下编写 Javascript 代码,需要先熟悉它的基本环境,包括: Gecko 内核:Mozilla 平台使用 Gecko 解析 HTML、CSS 等标记语言,并执行 Javascript 脚…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部