在TypeScript中获取并设置
我正在尝试为属性创建get和set方法:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
什么是关键字来设置一个值?
Typescript使用类似于ActionScript3的getter / setter语法。
class foo {
private _bar:boolean = false;
get bar():boolean {
return this._bar;
}
set bar(theBar:boolean) {
this._bar = theBar;
}
}
这将产生这个Javascript,使用Ecmascript 5 Object.defineProperty()功能。
var foo = (function () {
function foo() {
this._bar = false;
}
Object.defineProperty(foo.prototype, "bar", {
get: function () {
return this._bar;
},
set: function (theBar) {
this._bar = theBar;
},
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对就是矫枉过正。 如果您需要执行某些操作(如日志记录,只要读取或写入属性),则可以随后添加它们。
Ezward已经提供了一个很好的答案,但是我注意到其中一条评论询问它是如何使用的。 对于像我这样偶然发现这个问题的人来说,我认为将它链接到Typescript网站上有关getter和setter的官方文档是很有用的,因为这样可以很好地解释这一点,并且希望随着更改一直保持最新状态制作并显示示例用法:
http://www.typescriptlang.org/docs/handbook/classes.html
特别是,对于那些不熟悉它的人,请注意,您不会将“get”一词并入到对getter的调用中(对于setters也是如此):
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将被调用。
这是一个应该指向正确方向的实例:
class Foo {
_name;
get Name() {
return this._name;
}
set Name(val) {
this._name = val;
}
}
JavaScript中的getters和setter只是普通的函数。 setter是一个函数,它接受一个参数,其值是被设置的值。
链接地址: http://www.djcxy.com/p/40683.html上一篇: get and set in TypeScript
下一篇: cloning object