gpt4 book ai didi

angular - TypeScript getter setter 约定

转载 作者:搜寻专家 更新时间:2023-10-30 22:02:05 25 4
gpt4 key购买 nike

TypeScript 中类属性的约定(标准)是什么?

在 angular 2 演示(来自 angular.io 的 The Heroes Tour)中,所有属性都设置为公共(public):

export class Hero {
id: number;
name: string;
}

因此它们可以通过两种方式实例化:

var hero: Hero = new Hero();
hero.id = 0;
hero.name = "hero";

var hero2: Hero = {id : 0, name: "hero"};

是否有 Java 风格约定(像这样):

export class Hero {
private id: number;
private name: string;

setId(id: number): Hero {
this.id = id;
return this;
}

setName(name: string): Hero {
this.name = name;
return this;
}

getId(): number {
return this.id;
}

getName(): string {
return this.name;
}
}

声明(示例):

var hero: Hero = new Hero();
hero.setId(0).setName('hero');

var hero2: Hero = new Hero().setId(0).setName('hero');

最佳答案

Java 是一种静态编译语言。在 Java 中,如果您发布带有类的 .jar 库

class Foo {
public int bar;
}

然后决定围绕该字段引入逻辑

class Foo {
private int _bar;
public int getBar() { return _bar - 1; }
public void setBar(int v) { _bar = v + 1; }
}

任何使用您的 .jar 的代码都会中断,并且必须更新和重新编译。这就是为什么在 Java 中公开原始公共(public)字段是一个很大的禁忌。

TypeScript 是 JavaScript 的超集,JavaScript 是一种动态语言。所有链接都是动态的。您可以安全地发布带有类的库

class Foo {
bar: number
}

如果您稍后发布更新

class Foo {
private _bar: number
get bar() { return this._bar - 1 }
set bar(v: number) { this._bar = v + 1 }
}

您的图书馆用户不会注意到。

关于angular - TypeScript getter setter 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37532530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com