当前位置: 首页 > 知识库问答 >
问题:

在TypeScript中获取和设置

祁坚壁
2023-03-14

我正在尝试为属性创建get和set方法:

private _name: string;

Name() {
    get:
    {
        return this._name;
    }
    set:
    {
        this._name = ???;
    }
}

设置值的关键字是什么?

共有2个答案

丁毅庵
2023-03-14

Ezward已经提供了一个很好的答案,但我注意到其中一个评论问它是如何使用的。对于像我这样遇到这个问题的人来说,我认为在Typescript网站上有一个关于getters和setters的官方文档的链接会很有用,因为这很好地解释了这个问题,希望在更改时始终保持最新,并展示了示例用法:

http://www.typescriptlang.org/docs/handbook/classes.html

特别是,对于那些不熟悉它的人,请注意,您没有将“get”一词合并到对getter的调用中(对于setter也是如此):

var myBar = myFoo.getBar(); // wrong    
var myBar = myFoo.get('bar');  // wrong

您应该简单地执行以下操作:

var myBar = myFoo.bar;  // correct (get)
myFoo.bar = true;  // correct (set) (false is correct too obviously!)

给定一个类,如:

class foo {
  private _bar:boolean = false;

  get bar():boolean {
    return this._bar;
  }
  set bar(theBar:boolean) {
    this._bar = theBar;
  }
}

则将调用私有“_bar”属性的“bar”getter。

葛嘉悦
2023-03-14

TypeScript使用与ActionScript3类似的getter/setter语法。

class foo {
    private _bar: boolean = false;
    get bar(): boolean {
        return this._bar;
    }
    set bar(value: boolean) {
        this._bar = value;
    }
}

这将使用ECMAScript5object.defineProperty()特性生成此JavaScript。

var foo = (function () {
    function foo() {
        this._bar = false;
    }
    Object.defineProperty(foo.prototype, "bar", {
        get: function () {
            return this._bar;
        },
        set: function (value) {
            this._bar = value;
        },
        enumerable: true,
        configurable: true
    });
    return foo;
})();

所以要使用它,

var myFoo = new foo();
if(myFoo.bar) {         // calls the getter
    myFoo.bar = false;  // calls the setter and passes false
}

但是,为了使用它,您必须确保TypeScript编译器以ECMAScript5为目标。如果您正在运行命令行编译器,请像这样使用--target标志;

tsc --target ES5

如果使用的是Visual Studio,则必须编辑项目文件以将标志添加到TypeScriptCompile生成工具的配置中。您可以在这里看到:

正如@DanFromGermany在下面所建议的,如果您只是读取和写入一个本地属性,如foo.bar=true,那么使用setter和getter对是矫枉过正的。如果以后需要执行某些操作(如日志记录),则可以随时在读取或写入属性时添加它们。

 类似资料:
  • 问题内容: 这是我的工厂: 我在两个控制器MainCtrl和AccountEditCtrl中使用此服务,在MainCtrl中使用getFirstname(),在AccountEditCtrl中使用setFirstname 我的问题是,当我使用userService.setFirstname()时,$ scope.userName不会在MainCtrl中更改。 问题答案: 在某些情况下,$ watc

  • 问题内容: 我需要知道如何让NetBeans使用快捷方式生成getter和setter。 问题答案: 将光标放在班级内部,然后按+ 并从上下文菜单中选择。

  • 在VBA中,我希望从响应中截取字符串,并在随后的请求中设置它。 (如果Excel崩溃,这个cookie似乎丢失了,用户必须再次进行身份验证。我希望为用户设置最后存储的会话ID,这样如果会话在服务器上仍然有效,他们就不必在Excel客户机中重新进行身份验证。) 我看到了一些在线资源,根据这些资源,下面将拉出JSESSIONID cookie,但最后一行总是打印为空: 当我打印时,我看不到任何包含JS

  • 我有两个类(实际上是一个基类和许多其他类)。我希望获得子类中的父上下文,而不必每次都填充回< code>super()。它的基本目标是把我的角分量分成多个类。我会试着做一个例子 如您所见,我无法检索<code>这个。canvas并使用它,是否有任何解决方法。我知道我可以将画布传递到方法中,但我更希望像组件中一样使用<code>this<code>关键字来访问全局上下文。 所以基本上我想做的是: 任

  • 还有一个Java问题(我是noob,我知道):在自定义控件中使用动态属性绑定,在JavaBean中使用动态属性getter,可能吗? 我会解释的。我在自定义控件中广泛使用此功能: 这用于将数据源和字段名称作为参数传递的控件中。这工作,到目前为止还不错。现在,在某些情况下,数据源是托管bean。当解释上述行时,显然会生成代码来获取或设置...某物的值。但具体是什么呢? 我得到这个错误:从com类型的

  • 问题内容: 如何在WordPress中设置,获取和销毁cookie? 我在网上冲浪,但思路不清楚,请帮助我找到方法。 问题答案: 您可以使用PHP在服务器端或客户端使用JavaScript在服务器端检索和操作Cookie。 在PHP中,您可以使用设置Cookie 。请注意,必须在将任何输出发送到浏览器之前完成此操作,这在Wordpress中可能是很大的挑战。您几乎只限于可以通过插件或主题文件(例如