js改变this指向

1. 使用call()apply()方法

call()apply()方法都可以用来调用一个函数,并显式地设置this的值。它们之间的主要区别是call()方法接受一个参数列表,而apply()方法接受一个包含多个参数的数组。

复制代码
function greet(greeting, punctuation) {  
  console.log(greeting + ', ' + this.name + punctuation);  
}  
  
const person = {  
  name: 'John'  
};  
  
// 使用call  
greet.call(person, 'Hello', '!');  
// 输出: Hello, John!  
  
// 使用apply  
greet.apply(person, ['Hi', '.']);  
// 输出: Hi, John.

2. 使用箭头函数

箭头函数不绑定自己的this,它会捕获其所在上下文的this值作为自己的this值,并且这个绑定在函数创建时就完成了。

复制代码
const person = {  
  name: 'Jane',  
  greet: function() {  
    setTimeout(() => {  
      console.log(this.name); // this指向person对象  
    }, 1000);  
  }  
};  
  
person.greet(); // 输出: Jane

3. 使用bind()方法

bind()方法会创建一个新的函数,在bind()被调用时,这个新函数的this被指定为bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

复制代码
function greet(greeting, punctuation) {  
  console.log(greeting + ', ' + this.name + punctuation);  
}  
  
const person = {  
  name: 'Doe'  
};  
  
const greetDoe = greet.bind(person, 'Howdy', '!');  
greetDoe(); // 输出: Howdy, Doe!

4. 在构造函数中使用new关键字

当使用new关键字调用构造函数时,this会被绑定到新创建的对象上。

复制代码
function Person(name) {  
  this.name = name;  
  this.greet = function() {  
    console.log('Hello, ' + this.name);  
  };  
}  
  
const person = new Person('Alice');  
person.greet(); // 输出: Hello, Alice
相关推荐
_小许_几秒前
Go语言导入与导出excel文件
开发语言·golang·excel
小雨下雨的雨几秒前
蜡笔小画家鸿蒙PC用Electron框架 - 儿童学画蜡笔画技术实现详解
前端·javascript·华为·electron·前端框架·交互·鸿蒙系统
天蓝色的鱼鱼几秒前
别只拿 Playwright 写测试,这三个野路子用法才是真香
前端
SilentSamsara3 分钟前
高并发 API 压测与调优:locust + 火焰图 + 瓶颈定位
开发语言·python·青少年编程·docker·中间件
SoaringHeart3 分钟前
Flutter进阶|源码修改:DecorationImage 添加网络图片占位图
前端·flutter
myenjoy_15 分钟前
开源!Go+Wails+Vue3 手搓一个 PLC 实时监控桌面工具
开发语言·golang·开源
小新1108 分钟前
vue 实战项目 天气查询
前端·javascript·vue.js
Flash.kkl9 分钟前
C++基于websocketpp的多用户网页五子棋项目
开发语言·网络·数据库·c++·websocket·mysql
7yue9 分钟前
用 TypScript 学习 Claude Code
前端·typescript·claude
酉鬼女又兒10 分钟前
零基础入门计算机网络物理层:核心概念、传输媒体、传输方式、编码调制与信道极限容量完整知识点总结
开发语言·网络·计算机网络·考研·职场和发展·php·信息与通信