gpt4 book ai didi

typescript - 使用 get/set 访问器而不是标准的 getter/setter 方法有什么好处?

转载 作者:行者123 更新时间:2023-12-05 00:48:38 30 4
gpt4 key购买 nike

来自 Java,这样写一个类感觉更自然:

class Person1 {

private name: string;
constructor(name: string) {
this.name = name;
}

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

根据 http://www.typescriptlang.org/play/这被转换为相当简单的 ES5 代码:
var Person1 = /** @class */ (function () {
function Person1(name) {
this.name = name;
}
Person1.prototype.getName = function () {
return this.name;
};
return Person1;
}());

但是, official documentation使用关键字 get & set像这样:
class Person2 {

private _name: string;
constructor(name: string) {
this._name = name;
}

get name(): string {
return this._name;
}
}

这被转译为:
var Person2 = /** @class */ (function () {
function Person2(name) {
this._name = name;
}
Object.defineProperty(Person2.prototype, "name", {
get: function () {
return this._name;
},
enumerable: true,
configurable: true
});
return Person2;
}());

生成的 ES5 代码有技术优势吗?

谢谢!

最佳答案

这个问题并不适合stackoverflow,因为您得到的任何答案都必然在很大程度上基于意见,但是:

公共(public)属性优于 getter 和 setter 方法的原因有很多,其中包括更简洁的语法,以及减少的样板文件,因为您不必声明 getter 和 setter 方法。此外,在 Javascript 或 Typescript 中,您可能会经常使用普通对象,例如:

type IPerson = {
name: string
};

class Person implements IPerson {
constructor (public name: string) {};
}

function greet(person: IPerson) {
console.log(`Hello ${person.name}`);
}

greet(new Person('Napoleon'));
greet({name: 'Snowball'});

现在,如果您在访问(或更新)属性时确实需要做一些花哨的事情,您可以拥有一个带有 get 的类。/ set关于属性:
class Person2 implements IPerson {
constructor(private _firstname: string, private _lastname: string) {
}

get name(): string {
return `${this._firstname} ${this._lastname}`;
}
}

greet(new Person2('Old', 'Major'))

但要记住的重要一点是,您不会定义 get。和 set如果他们唯一要做的就是访问私有(private)属性,那么就没有理由这样做。

使用 getter 和 setter 仅在 Java 之类的语言中流行,它是保护对对象属性的访问的唯一选项。在其他支持 get 的语言中和 set属性更常见的是简单地将属性公开。然后,如果需要,您可以稍后更改类定义以使用 getset ,但前提是你需要它。以这种方式更改实现不需要对使用该类的代码进行任何更改。

这是重要的区别:在 Java 中,如果您需要从公共(public)属性更改为计算属性,则必须更改声明的接口(interface),从而影响使用该类的所有内容,因此您避免将属性公开为公共(public)属性。在 typescript 和大多数其他语言中,只有类实现发生变化,而不是暴露的接口(interface)。

关于typescript - 使用 get/set 访问器而不是标准的 getter/setter 方法有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293939/

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