打字稿中的关键字构造函数?

时间:2019-07-13 12:39:58

标签: typescript

我是打字稿中的“初学者”。现在我被构造函数所困扰。任何人都可以定义我的构造函数以及字符串示例(可能是易于理解的示例)吗? 谢谢

1 个答案:

答案 0 :(得分:1)

TypeScript是JavaScript加上静态类型系统,早期采用了一些尚未正式纳入JavaScript的提议功能,以及几乎可以肯定不会采用的一些功能。因此,让我们从其中的JavaScript部分开始。

构造函数(通常只是“构造函数”)是与new关键字一起使用的函数,用于创建具有特定原型的对象。例如,此语句中的Example是构造函数:

const ex = new Example();

其中的new Example()部分有两件事:

  1. 创建一个新对象,该对象继承自Example.prototype属性所引用的对象。
  2. 运行Example中的代码,其中this引用新创建的对象

在现代JavaScript(和TypeScript)中,您可以通过class语法创建构造函数。

class Person {
    constructor(name) {
        this.name = name;
    }
}

在ES2015之前,您使用传统的函数语法,但是现在使用class语法(如果您使用构造函数)(与JavaScript和TypeScript也支持的任何其他编码范例相对,例如函数编程) ),请使用class语法,因为它对于非平凡的示例更为简洁,并且具有传统函数语法所不具备的一些功能。

class构造函数只能 作为构造函数调用,除非作为创建新实例的一部分,否则不能调用。

这是一个简单的例子:

class Person {
    constructor(name) {
        this.name = name;
    }
    sayHi() {
        console.log(`Hi, I'm ${this.name}`);
    }
}

使用它:

const p = new Person("FlyingBird");
p.sayHi(); // "Hi, I'm FlyingBird"

移动到TypeScript上,构造函数本身唯一真正的TypeScript特定功能是,您可以在其参数列表中使用语法来自动创建属性。在上面的JavaScript示例中,构造函数具有参数name,该参数用于在要创建的对象上创建名为name的公共属性。在TypeScript中,您可以更简洁地执行相同的操作:

// TypeScript
class Person {
    constructor(public name: string) {
    }
    sayHi() {
        console.log(`Hi, I'm ${this.name}`);
    }
}

public参数上的name告诉TypeScript自动将该参数的值分配给具有相同名称的公共属性。您还可以使用private分配给TypeScript样式的私有属性。 (TypeScript的私有属性并不是真正的私有,尽管它们通常足够好;它们不同于JavaScript的私有字段 [不是属性]。)