JavaScript 中最令人困惑的关键字之一是 this 关键字。它是一个特殊的标识符关键字,在每个函数的作用域中自动定义,但它到底指的是什么,即使是经验丰富的 JavaScript 开发人员也会感到困惑。
this 关键字指的是一段代码(例如函数体)应该运行的上下文。最典型的是,它用在对象方法中,其中 this 指的是该方法所附加的对象,从而允许在不同的对象上重用相同的方法。
this 的值可以在函数执行的地方识别,而不是在函数声明的地方
我们将检查不同的规则来识别 javascript 中的 this
默认绑定
我们将应用函数调用最常见情况的默认规则:独立函数执行。当其他规则都不适用时,将此规则视为默认的包罗万象的规则。
在独立函数调用中,该值将是全局对象(在浏览器环境中,它是窗口对象,在节点环境中,它将是全局对象)
function bar() { console.log(this) // this will be global object (window) } bar()
但是......
这个值可以与代码在严格模式或非严格模式下运行的方式不同
如果当函数作为独立函数调用时,这通常在非严格模式下引用全局对象,在严格模式下引用未定义
"use strict" function bar() { console.log(this) // undefined } bar()
微妙但重要的是,只有当 bar() 的内容未在严格模式下运行时,全局对象才有资格进行默认绑定;
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
隐式绑定
当常规函数作为对象的方法 (obj.method()) 被调用时,this 指向该对象。
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
首先,请注意声明 bar() 以及随后将其作为引用属性添加到 obj 上的方式。无论 foo() 最初是在 obj 上声明,还是稍后添加为引用(如此代码片段所示),在任何一种情况下,该函数都不会真正由 obj 对象“拥有”或“包含”。
隐式丢失:
使用回调时,隐式绑定函数会丢失该绑定,这通常意味着它会回退到全局对象或未定义的默认绑定,具体取决于严格模式。
function bar() { setTimeout(function() { console.log(this) // this will be global object }, 1000); } const obj = { name: "javascript", bar } obj.bar() // this will be global object
function bar() { console.log(this) } const obj = { name: "javascript", bar } const a = obj.bar a() // this will be global object
显式绑定
使用我们刚刚看到的隐式绑定,我们必须修改相关对象以包含其自身对函数的引用,并使用此属性函数引用来间接(隐式)将 this 绑定到对象。
但是,如果您想强制函数调用使用特定对象进行 this 绑定,而不在该对象上放置属性函数引用,该怎么办?
是的,这是可能的,javascript提供了很多方法,例如.map,.filter数组,我们在函数中只有很少的方法。它们是 apply 、 call 和 bind
这是这些方法的语法
打电话
function bar() { console.log(this) // this will be global object (window) } bar()
申请
"use strict" function bar() { console.log(this) // undefined } bar()
apply 和 call 之间有细微的区别。语法相同,但我们在 apply 方法中将参数作为数组传递
function bar() { console.log(this) // global object (window) } (function() { "use strict" bar() })()
通过 bar.call(..) 显式绑定调用 bar 允许我们强制其 this 为 obj。
新绑定
当一个函数用作构造函数时(使用 new 关键字),它的 this 会绑定到正在构造的新对象,无论构造函数是在哪个对象上访问的。 this 的值将成为 new 表达式的值,除非构造函数返回另一个非原始值。
function bar() { console.log(this) } const obj = { name: "javascript", foo } obj.foo() // this here is object owing the function
以上是JavaScript 中的 this 关键字的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器