Skip to content

TypeScript 中的 this 参数说明 ​

关键区别 ​

TypeScript 代码(编译前) ​

typescript
replaceAop(originalXhrProto, 'open', (originalOpen: voidFun) => {
    return function (this: any, ...args: any[]): void {
      // this: any 是类型注解,不是真正的参数
      this.websee_xhr = { ... };
      originalOpen.apply(this, args);
    };
});

编译后的 JavaScript 代码 ​

javascript
replaceAop(originalXhrProto, 'open', (originalOpen) => {
    return function (...args) {
      // 注意:this 参数在编译后被移除了!
      this.websee_xhr = { ... };
      originalOpen.apply(this, args);
    };
});

为什么 TypeScript 允许 this: any? ​

  1. 类型注解,不是参数:this: any 是 TypeScript 的特殊语法,用于指定函数的 this 上下文类型
  2. 编译时移除:TypeScript 编译器会移除这个类型注解,不会出现在最终的 JavaScript 代码中
  3. 类型检查:帮助 TypeScript 进行类型检查,确保 this 的使用是正确的

在 JavaScript 中 ​

  • ❌ 不能写:function(this, ...args) - this 是保留关键字
  • ✅ 正确写法:function(...args) - this 由调用方式决定

实际运行时的 this ​

无论是 TypeScript 还是 JavaScript,当函数作为方法调用时:

javascript
xhr.open("GET", "https://api.github.com");
// 此时 this 自动指向 xhr 实例

this 的值由调用方式决定,不是通过参数传递的。

更新时间: