在对象的JavaScript函数中,哪个作用域代表了这一点?

时间:2019-02-20 16:20:21

标签: javascript typescript ecmascript-6

我有一个JavaScript代码,看起来像下面的摘录。 在行中,

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

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

我已经阅读过此post on this scope,但根据我的信念,在setAdminthis指的是MyClass,其中不包括(或不包括)像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;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

  

setAdmin指的是MyClass,它不包含(或不是?)传递给构造函数的参数,如user。

您是正确的,this是对当前正在构造的MyClass实例的引用。但是,由于您将参数标记为public,因此打字稿将用户置于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;
});