作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这两种创建/初始化新对象的方式有什么区别吗?或者它们是相同的吗?一种方法比另一种更好吗?
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/
我是一名优秀的程序员,十分优秀!