Typescript 中的 Getter/Setter

2024-04-08

我正在学习有关 Typescript 类的教程,教学人员创建了一个类和一些 setter/getter 方法。但是当我读到时打字稿文档 https://www.typescriptlang.org/docs/handbook/classes.html方法有些不同。有人可以帮助我理解这两种方法之间的区别。

方法一:

class Student {
private _name: string;

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

getName = (): string => {
    return this._name;
}

setName = (name: string) => {
    this._name = name;
}
}

方法2:

class Student {
private _name: string;

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

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


public set name(value: string) {
    this._name = value;
}
}

看一看。在方法 1 中,我们将 getter/setter 编写为普通函数,但在方法 2 中,使用了关键字 get/set。有人可以帮助我理解这两种方法之间的区别。


您使用它们的方式有所不同。在第一种情况下,您需要显式调用get/set方法。在第二个你可以使用name就像类上的实际字段一样,运行时将调用get/set自动访问器。

考虑将字符附加到名称的简单示例:

方法一

let s = new Student();
s.setName(s.getName() + "A") // we need to explicitly call the get/ set methods

方法2

let s = new Student();
s.name += "A" // we can use += and the get/set accessors will get called for us

幕后的get/set访问器方法(方法 2)将使用对象.defineProperty https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 中的 Getter/Setter 的相关文章

随机推荐

  • 用python计算时间序列数据的概率分布

    我有一个关于概率分布函数的问题我有一个时间序列数据 我想计算不同时间窗口内数据的概率分布 我开发了以下代码 但我找不到该函数的概率分布值 a pd DataFrame 0 0 21 660332407421638 20 5642894358
  • 如何在 RHEL 虚拟机上运行 minikube?

    有没有办法在 RHEL VM 虚拟机管理程序 上运行 Kubernetes minikube 或者还有其他方法可以使用单个虚拟机尝试 Kubernetes 吗 要在 RHEL CentOS VM 上运行 minikube 您需要在安装 mi
  • 在 CodeRush 中查找键绑定定义

    如果我部署了社区插件并在 CodeRush 中设置了键绑定 那么我现在如何找到我在选项对话框 树层次结构中归档它的位置 打开 CodeRush 选项屏幕 选择DevExpress 选项从菜单或点击Ctrl Shift Alt O 然后找到I
  • 尝试从私有实例调用模板方法时出现编译器错误[重复]

    这个问题在这里已经有答案了 如果您已经知道答案 这个问题只是另一个问题的重复 请注意我的后续问题 如果存在同名的不相关的全局模板函数 为什么不需要模板关键字 https stackoverflow com questions 2389249
  • 正则表达式失败时非常慢

    我有一个正则表达式 应该验证字符串是否由空格分隔的字符串组成 正则表达式工作得很好 好吧 它最后允许有一个空格 但这不是他的问题 但是当验证失败时需要很长时间 正则表达式如下 w 0 当尝试使用字符串进行验证时 this is SAMPLE
  • Rest 服务抛出异常:最佳处理方法

    我有一个休息服务 它会抛出异常 我想知道处理这个问题的最佳方法是什么 所以我有一个休息服务 它可以抛出用户定义的异常 我在 catch 块内捕获该异常并再次抛出该异常 并使用休息框架来捕捉这一点 对于非用户定义的异常也是如此 我认为这会很好
  • 为什么在 Java 中两个整数相除会返回 0.0? [复制]

    这个问题在这里已经有答案了 int totalOptCount 500 int totalRespCount 1500 float percentage float totalOptCount totalRespCount 为什么它总是返回
  • 如何向 UIAlertController 添加进度条?

    我想在 swift iOS 8 UIAlertController 中添加进度条 这可能吗 有没有办法继承 UIAlertController 并添加进度条并连接一些委托函数 thanks 如果您只需要一个进度条 只需将其添加为子视图 如下
  • 检查@@rowcount函数来确定行是否存在可以吗?

    我正在浏览我们的代码库并看到很多这样的测试 declare row id int declare row attribute string select row attribute ROW ATTRIBUTE from SOME TABLE
  • isset() 和empty() - 使用什么

    你能帮助我改进我的编码风格吗 在某些任务中我需要检查 变量是否为空或包含某些内容 为了解决这个任务 我通常会执行以下操作 检查 该变量是否已设置 如果它已设置 我检查 它是否为空 我有一个问题 我应该在empty 之前使用isset 有必要
  • 错误:org.apache.hadoop.hbase.MasterNotRunningException:null+hbase+hadoop

    我最近用两台机器 在ubuntu上 配置了hadoop集群 到目前为止效果很好 但是当我尝试在上面的 hadoop 集群上配置 hbase 时 它 显示错误 这就是我所做的 我有两台机器 192 168 1 110 Hadoop主站 192
  • 无法翻译 LINQ 表达式

    我有一张桌子叫Orders和一个名为Customers Orders有财产CustomerId 现在我想获取我的客户的所有订单Customers list 这是我尝试过的 IEnumerable
  • 如何右对齐 JLabel 中的图标?

    对于带有图标的 JLabel 如果您setHorizontalTextPosition SwingConstants LEADING 无论标签有多宽 图标都会绘制在文本之后 这对于列表来说尤其糟糕 因为图标会到处都是 具体取决于每个项目的文
  • FireMonkey TListview 搜索重新加载问题

    当您进行搜索时 TListview 无法正确重新加载 请清除搜索 然后重新加载列表视图 使用XE5 步骤是 项目运行后 在搜索中输入文本 单击 清除 按钮或删除搜索文本或单击搜索 X 按钮清除搜索 按 重新加载 按钮 什么也没有出现 您可以
  • Webview 不加载 URL,但浏览器会加载

    因此 从我的第一个屏幕开始 我将 URL 传递给要在 Web 视图中启动的活动 但是当 webview 启动时 它显示 web page not available The web page at URL might be temporar
  • 需要 Microsoft Visual C++ 14.0,在 Windows Docker 上安装 pip 包

    我希望能够安装 C 编译器 因为某些软件包没有我需要的轮子 Windows 上大量的 Visual Studio 构建工具中所需的确切工具需要大量挖掘 并且安装需要很长时间 我见过一些导致此问题的错误 请随意将其他错误添加到此列表中 库 m
  • 嵌套形式和一对一关系

    我的用户和目标之间存在一对一的关系 我想构建一个显示用户目标的表单 问题是我的代码仅在用户已经定义了目标时才有效 当不存在目标时 不会呈现文本字段 Rails 是否提供了一种简单的方法来做到这一点 我就是这样做的 class User lt
  • 在 beforeAction 中渲染视图时,在 Yii 中出现“标题已发送”错误

    我读过 Yii2 的处理程序 但我不知道如何在这种情况下正确使用它们 基本上在我的SiteController 我有 class SiteController extends app components Controller public
  • 我们可以从 WPF 窗口将文件拖放到 Windows 资源管理器中吗?

    我有一个显示当前文件系统的树视图 我想添加功能以允许将文件拖放到 Windows 资源管理器中 如果我拖动树视图的任何节点并将其放在 Windows 资源管理器的任何窗口上 则文件将被复制到该位置 我怎样才能做到这一点 初读this htt
  • Typescript 中的 Getter/Setter

    我正在学习有关 Typescript 类的教程 教学人员创建了一个类和一些 setter getter 方法 但是当我读到时打字稿文档 https www typescriptlang org docs handbook classes h