是的,如果您想訪問班級字段,則必須使用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();
事實上,如果你看一下由打字稿編譯器輸出的JavaScript中,後者的例子可能是什麼,你會看到(給予或採取)。所以實際上,雖然你可以在你的代碼中使用類字段,但JavaScript並沒有任何概念 - 你只是在構造函數中獲取和設置屬性。
該規範不是讓類對正常函數有不同的語法規則,而是儘可能保持映射與現有規則一致,並保持類語法最小。這就是爲什麼你必須指定this
,與Java或C#不同。
如果變量是全局變量,則必須使用'this'關鍵字。你可以使用'let',但只能用於函數內部聲明的變量(局部變量)。 –
[this](https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript)將有助於在JavaScript和輸入腳本的上下文中理解'this' –