class Human {
static totalPeople = 0;
_name; // ES2016 property declaration syntax
constructor(name) {
this._name = name;
Human.totalPeople += 1;
}
get name() {
return this._name;
}
set name(val) {
this._name = val;
}
talk() {
return `Hi, I'm ${this.name}!`;
}
}
class Developer extends Human {
_languages; // ES2016 property declaration syntax
constructor(name, languages) {
super(name);
this._languages = languages;
}
get languages() {
return this._languages;
}
talk() {
return `${super.talk()} And I know ${this.languages.join(', ')}.`;
}
}
由于ts编译器在编译阶段会检查指定类实例上的各种属性,因此要在类定义中加入属性声明,如_name。
在上段代码中,定义了一个叫Human的类,这个类会给它的实例添加唯一一个属性,并把这个属性的值设置为构造函数中的name参数。
加入以下代码进行测试:
var human = new Human("foobar");
var dev = new Developer("bar",["Javascript"]);
console.log(dev.talk());
结果如下:
Hi, I'm bar! And I know Javascript.