Typescript构造函数,这两种构造对象的方法是等价的吗?

标签 typescript constructor

这两种创建/初始化新对象的方式有什么区别吗?或者它们是相同的吗?一种方法比另一种更好吗?

class Person {
  FirstName: string = "";
  LastName: string = "";

  constructor(FN: string, LN: string) {
    this.FirstName = FN;
    this.LastName = LN;
  }
}




var P:Person;

var P = new Person("John", "Smith"); // METHOD #1

var P = {FirstName:"John", LastName:"Smith"};     // METHOD #2

最佳答案

您正在创建的类型存在差异。在第一种情况下,您将创建 Person 的实例,在第二种情况下,您将创建一个与 Person 具有相同形状的对象。

两者之间存在差异,例如 insanceof 的行为不同。

var P1 = new Person("John", "Smith");     
var P2 : Person = {FirstName:"John", LastName:"Smith"};  

console.log(P1 instanceof Person) // true
console.log(P2 instanceof Person) // false

此外,如果您的类具有方法,则需要在使用对象文字初始化时指定它们:

class Person {
    FirstName: string = "";
    LastName: string = "";

    constructor(FN: string, LN: string) {
        this.FirstName = FN;
        this.LastName = LN;
    }
    fullName() { return this.LastName + this.FirstName; }
}
var P2: Person = { FirstName: "John", LastName: "Smith" }; // error fullName missing 
var P3: Person = { FirstName: "John", LastName: "Smith", fullName: Person.prototype.fullName }; // ok

如果该类具有私有(private)属性,则无法构建兼容的对象文字:

class Person {
    FirstName: string = "";
    LastName: string = "";

    constructor(FN: string, LN: string) {
        this.FirstName = FN;
        this.LastName = LN;
    }
    private fullName;
}
var P2: Person = { FirstName: "John", LastName: "Smith" }; // error Property 'fullName' is missing in type
var P3: Person = { FirstName: "John", LastName: "Smith", fullName: ""}; // Property 'fullName' is private in type 'Person' but not in type 

关于Typescript构造函数,这两种构造对象的方法是等价的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434523/

相关文章:

javascript - 类型 'void' 不可分配给类型 '((event: MouseEvent<HTMLInputElement>) => void) | undefined'

c++ - 构造函数重载造成困惑

c++ - 继承和初始化顺序

node.js - 如何严格指定返回类型 Angular4/ionic3

javascript - typescript :从方法参数中调用方法

angular - 循环调用 Angular2 服务

reactjs - 如何在 DevOps 中根据其发布阶段设置变量?

c++ - 在构造函数上 union 使用已删除函数的类

perl - Moose:将参数注入(inject)构造

C++ 当我离开默认构造函数时,我的初始化字符串消失了,但我的其他成员变量值却没有