首页 > 解决方案 > 哪个作用域在对象内的 JavaScript 函数中表示 this?

问题描述

我有一个类似于下面摘录的 JavaScript 代码。线上,

this.orgBusinessKey = this.user.noaOrganisationList[0].businessKey;

范围是否this包含user作为参数传递给构造函数的实例?

我已经阅读了关于thisscope的这篇文章,但是,根据我的信念, atsetAdmin this指的是MyClasswhich 不包括(或者是吗?)user传递给构造函数的参数。

export interface IUser {
  noaOrganisationList: IOrganisation[];
}

export interface IOrganisation {
    id?: number;
    name?: string;
    businessKey: string;
}

export class MyClass {

  orgBusinessKey: string = '';

  constructor(public user: IUser)
  {
    this.setAdmin(user);
  }

  setAdmin(user: IUser): void {
    if (user && user.noaOrganisationList && !_.isEmpty(user.noaOrganisationList)) {
      this.orgBusinessKey = this.user.noaOrganisationList[0].businessKey;
    }
  }
}

标签: javascripttypescriptecmascript-6

解决方案


setAdmin this 指的是 MyClass ,它不包括(或者是吗?)像用户传递给构造函数的参数。

没错,这this是对当前正在构建的 MyClass 实例的引用。但是,由于您将参数标记为 public,typescript会将用户置于this.user. 将构造函数的参数标记为公共(或私有)是打字稿提供的一种快捷方式,用于将参数分配给类的实例。

如果有帮助,您的代码的转译版本如下所示:

define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var MyClass = /** @class */ (function () {
        function MyClass(user) {
            this.user = user; //  <------------------ SEE THIS LINE
            this.orgBusinessKey = '';
            this.setAdmin(user);
        }
        MyClass.prototype.setAdmin = function (user) {
            if (user && user.noaOrganisationList && !_.isEmpty(user.noaOrganisationList)) {
                this.orgBusinessKey = this.user.noaOrganisationList[0].businessKey;
            }
        };
        return MyClass;
    }());
    exports.MyClass = MyClass;
});

推荐阅读