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

时间:2017-03-03 13:28:50

标签: javascript angular typescript

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

let nameOfTheStudent=this.studentName;

首先,如果我不想写混淆"这"一直都在吗?

1 个答案:

答案 0 :(得分: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();

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

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