this的三个典型应用

博客介绍了this的三个典型应用。一是在html元素事件属性中使用;二是通过示例展示了在构造函数中使用this定义对象属性;三是利用Math.max的apply和call方法结合this求数组最大值,如对[5, 458, 120, -215]求最大值。

(1)、在html元素事件属性中使用,如:

(2)、构造函数

function Animal(name, color) {
  this.name = name;
  this.color = color;
}
(3)、input点击,获取值

(4)、apply()/call()求数组最值

var numbers = [5, 458 , 120 , -215 ];
var maxInNumbers = Math.max.apply(this, numbers);
console.log(maxInNumbers); // 458
var maxInNumbers = Math.max.call(this,5, 458 , 120 , -215);
console.log(maxInNumbers); // 458

<think>嗯,用户这次想了解JavaScript中this关键字的三个典型应用场景。根据引用内容,this在JavaScript中确实是个容易让人困惑的概念,用户可能需要明确的使用案例来帮助理解。 从引用[2]和[3]可以看出,this的指向会随执行环境变化,这是理解它的关键。用户之前似乎已经接触过基础概念,现在需要更具体的场景化说明。 第一个典型场景应该是对象方法调用,引用[3]的person.fullName()例子很经典。这里this自然指向调用该方法的person对象,可以把这个案例作为第一个场景。 第二个场景要考虑构造函数的情况。引用[4]和[5]都提到new关键字会改变this指向,让this绑定到新创建的实例上。tom.showName()的例子特别能说明问题,这个应该作为第二个场景。 第三个场景选什么呢?引用[1]提到MDN文档中有详细解释,想到事件处理函数中的this通常会指向触发事件的DOM元素。虽然用户提供的引用里没直接说,但这是前端开发中非常常见的应用场景,值得补充。 用户提供的几个引用质量不错,特别是阮一峰和MDN的资源都很有权威性。在回答时要注意把技术点说得通俗些,毕竟用户可能正在学习这个概念。对于构造函数那个场景,引用[5]的解释有点绕,需要简化成更直白的表述。 最后生成的问题要覆盖用户可能延伸的疑问,比如箭头函数对this的影响,这在现代JS开发中太重要了,必须包含进去。 </think> JavaScript中`this`关键字的行为取决于其执行上下文,以下是三个典型应用场景及其核心原理分析: ### 1. 对象方法中的`this`(指向调用对象) **场景描述**: 当函数作为对象的方法被调用时,`this`指向**调用该方法的对象**。 **示例代码**: ```javascript const person = { name: &#39;Alice&#39;, greet() { console.log(`Hello, I&#39;m ${this.name}`); } }; person.greet(); // 输出:Hello, I&#39;m Alice(this指向person对象) ``` **关键点**: - `greet`方法中的`this`由调用者`person`决定 - 若方法被分离调用(如`const fn = person.greet; fn()`),`this`会丢失绑定(非严格模式下指向`window`)[^3] --- ### 2. 构造函数中的`this`(指向新实例) **场景描述**: 使用`new`调用构造函数时,`this`绑定到**新创建的对象实例**。 **示例代码**: ```javascript function User(name) { this.name = name; // this指向新实例 this.sayHi = () => console.log(`Hi, ${this.name}!`); } const bob = new User(&#39;Bob&#39;); bob.sayHi(); // 输出:Hi, Bob!(this绑定bob实例) ``` **关键点**: - `new`操作符会: 1. 创建新空对象 `{}` 2. 将新对象的原型链指向构造函数的`prototype` 3. 将`this`绑定到该新对象 4. 执行构造函数逻辑 5. 返回新对象(除非构造函数返回非空对象)[^4][^5] --- ### 3. 事件处理器中的`this`(指向触发元素) **场景描述**: 在DOM事件处理函数中,`this`默认指向**触发事件的元素**。 **示例代码**: ```javascript document.querySelector(&#39;button&#39;).addEventListener(&#39;click&#39;, function() { console.log(this); // 输出:<button>元素(this指向被点击的按钮) }); ``` **关键点**: - 此规则适用于传统`function`定义的监听器 - 箭头函数会继承外层`this`(通常指向`window`),不适用于需要元素引用的场景[^1] --- ### 关键区别总结 | 场景 | `this`指向 | 绑定方式 | |---------------------|---------------------|------------------| | 对象方法调用 | 调用对象 | 隐式绑定 | | `new`构造函数 | 新创建的实例 | new绑定 | | DOM事件处理函数 | 触发事件的DOM元素 | 浏览器默认绑定 | > ⚠️ **注意事项**:箭头函数没有自己的`this`,会继承外层作用域的`this`值,因此在上述场景中表现不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值