Angular2,Typescript - 类变量和"this"的用法

Phi*_*hil 0 javascript typescript angular

我想知道在引用实例变量时是否每次都必须使用"this"关键字.来自Java我只习惯在另一个范围内有另一个具有相同名称的变量时使用"this"(例如.this.arg = arg).但是在Typescript的所有教程中,每当引用实例变量(public studentName:string;)时,人们似乎都会使用"this".因此,如果我需要使用一个没有相同名称的参数的简单方法,我真的需要这样做:

let nameOfTheStudent=this.studentName;
Run Code Online (Sandbox Code Playgroud)

首先,如果我不想一直写出令人困惑的"这个"?

Joe*_*lay 5

是的,如果要访问类字段,则必须使用this.field.不过,这是一个非常简短而无聊的答案,所以这里有一些背景.

关于JavaScript/TypeScript类的一个重要事项是它们只是现有基于原型的对象系统的语法糖.例如,这两段代码在功能上是等价的:

// ===== Class syntax =====

class MyClass {
    myField: string;

    constructor() {
        this.myField = "Hello, world!";
    }

    myMethod() {
        return this.myField;
    }
}

let myInstance = new MyClass();

// ===== Prototype syntax =====

function MyClass() {
    this.myField = "Hello, world!";
}

MyClass.prototype.myMethod = function() {
    return this.myField;
};

let myInstance = new MyClass();
Run Code Online (Sandbox Code Playgroud)

实际上,如果你看一下TypeScript编译器生成的JavaScript,后一个例子可能就是你会看到的(给予或接受).所以实际上,尽管你可以在你的代码中使用类字段,但JavaScript并没有任何关于它们的概念 - 你只是在构造函数上获取和设置属性.

该规范不是使类具有与普通函数不同的语法规则,而是旨在使映射尽可能与现有规则保持一致,并使类语法保持最小.这就是您必须指定的原因this,与Java或C#不同.