当前位置: 首页 > news >正文

深圳官网建站服务商网站建设空间申请

深圳官网建站服务商,网站建设空间申请,seo技术顾问阿亮,优秀企业网站模板在 JavaScript 中,this 是一个特殊关键字,其值取决于函数的 调用方式 而非定义位置。它的行为遵循一套明确的规则,以下是核心规则和示例:1. 默认绑定(独立函数调用) 当函数独立调用时(不作为方法…

在 JavaScript 中,this 是一个特殊关键字,其值取决于函数的 调用方式 而非定义位置。它的行为遵循一套明确的规则,以下是核心规则和示例:


1. 默认绑定(独立函数调用)

当函数独立调用时(不作为方法、构造函数等),this 指向全局对象:

  • 浏览器中window
  • Node.js 中global
function show() {console.log(this); // 浏览器:Window / Node.js:global
}
show(); // 独立调用

严格模式('use strict')下thisundefined


2. 隐式绑定(方法调用)

当函数作为对象方法调用时,this 指向 调用该方法的对象

const user = {name: "Alice",greet() {console.log(`Hello, ${this.name}!`);}
};
user.greet(); // "Hello, Alice!"(this = user)

⚠️ 易错点:绑定丢失
若将方法赋值给变量后调用,会丢失原始绑定,退回到默认绑定:

const greet = user.greet;
greet(); // "Hello, undefined!"(this 指向全局)

3. 显式绑定(call / apply / bind)

通过 call()apply()bind() 强制指定 this

function greet() {console.log(`Hello, ${this.name}!`);
}const alice = { name: "Alice" };
const bob = { name: "Bob" };// call/apply 立即调用
greet.call(alice); // "Hello, Alice!"(this = alice)
greet.apply(bob);  // "Hello, Bob!"(this = bob)// bind 创建新函数(永久绑定)
const boundGreet = greet.bind(alice);
boundGreet(); // "Hello, Alice!"

4. new 绑定(构造函数)

使用 new 调用构造函数时,this 指向 新创建的对象

function Person(name) {this.name = name; // this = 新对象
}
const alice = new Person("Alice");
console.log(alice.name); // "Alice"

5. 箭头函数:词法作用域绑定

箭头函数 没有自己的 this,它会继承外层作用域的 this(定义时绑定,非调用时):

const user = {name: "Alice",greet: function() {// 普通函数:this = usersetTimeout(() => {console.log(`Hello, ${this.name}!`); // this 继承自 greet}, 100);}
};
user.greet(); // "Hello, Alice!"(箭头函数捕获了 user)

⚠️ 注意

  • 箭头函数的 this 不可通过 call/bind 修改。
  • 对象字面量、类中的箭头函数会绑定到外层作用域(可能是全局)。

特殊场景总结

场景this 指向示例
独立函数调用全局对象(严格模式为 undefinedfunc()
对象方法调用调用该方法的对象obj.method()
call/apply/bind显式指定的对象func.call(ctx)
new 构造函数新创建的对象实例new Constructor()
箭头函数外层词法作用域的 this() => { ... }
DOM 事件处理触发事件的元素button.onclick = func

常见问题解决技巧

  1. 方法绑定丢失:用 bind() 或箭头函数固定 this

    // 方法1: bind
    const boundMethod = obj.method.bind(obj);
    // 方法2: 箭头函数
    obj.method = () => { ... };
    
  2. 回调函数中的 this

    • 使用箭头函数保留外层 this
    • 显式绑定:setTimeout(function() {...}.bind(this), 100)
  3. 类中的方法:使用箭头函数或手动绑定,避免丢失 this

    class Counter {count = 0;// 方案1: 类字段(箭头函数)increment = () => {this.count++;};// 方案2: 构造函数中绑定constructor() {this.decrement = this.decrement.bind(this);}decrement() {this.count--;}
    }
    

终极秘诀

this 的值在函数调用时确定,而非定义时。
始终问自己:这个函数是如何被调用的?

  • obj.func()this = obj
  • func()this = 全局/undefined
  • new Func()this = 新对象
  • 箭头函数 → 继承外层 this
http://www.dtcms.com/a/482514.html

相关文章:

  • RAG系统向量化存储技术深度解析:双索引架构与批量处理实践
  • 复习总结最终版:计算机网络
  • wordpress导航站模版海南省建设注册中心网站
  • 成都建设路小学网站可以看的网站都有哪些
  • Unreal Engine 跨平台构建完全指南
  • 一个专门做恐怖片的网站安徽华建建设工程公司网站
  • selenium对每种前端控件的操作,python举例
  • php网站打开慢网站设计需要考虑的基本原则
  • oracle数据库 ZHS16GBK 数据库 VARCHAR2字段无法存储生僻字解决方案、如“䶮”生僻字、oracle utl_raw函数解释
  • Python - 100天从新手到大师:第五十五天使用缓存
  • K8S(八)—— Kubernetes 集群调度全面解析:从组件协作到实战(含亲和性、污点容忍与故障排查)
  • 基于MATLAB的遗传算法优化支持向量机实现
  • k8s(四)Kubernetes 集群调度
  • 如何从 iPhone 中导出视频
  • 关于网站开发的开题报告郑州制作平台网站
  • 吐鲁番做网站godaddy服务器做网站
  • 特色专业建设验收网站如何做网络营销方案策划
  • iBizModel 日历部件(PSSYSCALENDAR)模型体系详解
  • Goroutine间的“灵魂管道”:Channel如何实现数据同步与因果传递?
  • 一个网站上能不能放两个域名 两个备案号沧县做网站价格
  • GPIO 也是一个接口,还有 QEMU GPIODEV 和 GUSE
  • 网站制作公司电话山东专业网站建设公司
  • 第 8 篇:更广阔的世界 - 加载 3D 模型
  • C/C++---_access 和 access 函数 文件/目录状态判断
  • Linux内存管理-缓存系统中的Major和Minor详解
  • 8 读写分离-实战
  • 手机网站建设西安检查网站是否做301
  • 网站Favicon图标:小图标背后的大作用 引言
  • 什么是GEO生成式引擎优化?GEO科普:定义、原理与应用指南
  • 使用 Gensim 进行主题建模(LDA)与词向量训练(Word2Vec)的完整指南