类本身上的Javascript getter和setter
声明js类时,我们可以为该类的属性定义getter和setter,如下所示:类本身上的Javascript getter和setter,javascript,class,setter,getter,self,Javascript,Class,Setter,Getter,Self,声明js类时,我们可以为该类的属性定义getter和setter,如下所示: class Foo{ get bar(){ return 'foo-bar'; } set bar(n){ this.baz = n * 10; } } let foo = new Foo(); console.log(foo.bar) //foo-bar foo.bar = 7; console.log(foo.baz) //70 我想知道
class Foo{
get bar(){
return 'foo-bar';
}
set bar(n){
this.baz = n * 10;
}
}
let foo = new Foo();
console.log(foo.bar) //foo-bar
foo.bar = 7;
console.log(foo.baz) //70
我想知道的是,如何定义类本身的getter和setter?
例如,foo=7将触发一个代码块,console.log(foo)将打印“foobar”。您不能
foo = 7;
将
foo
重新分配给7
你不能foo=
表示您正在为变量foo
赋值。最好是在创建类的实例时使用构造函数运行一些代码
class Foo{
constructor(){
console.log('A Foo instance has been created!');
}
get bar(){
return 'foo-bar';
}
set bar(n){
this.baz = n * 10;
}
}
有些语言在值被销毁或超出范围并最终被垃圾收集器清除时,也有一个
析构函数规范,等等,但es6不提供这种功能。一个问题:为什么?当您分配给变量时,该变量的旧值被完全忽略,它没有机会拦截。@AndrewLi我想创建实例具有操作逻辑的类。例如,vector2A+=vector2B,据我所知,我需要getter和setter来实现这一点,除非js有另一种定义的方法来实现这一点。@Barmar我想这是一个很好的替代方法,尽管这正是我试图避免的。希望js将来会支持这样的定义。你确定吗?我假设有一种可能性,因为foo.bar=7也没有将7分配给foo.bar。@Jrs.b这毫无意义。。。为什么foo.bar=7
会将7分配给foo.bar
?为什么分配foo
不会改变foo
?@Jrs.b这是因为它在访问属性bar
时正在遍历对象。对象可以将其重定向到getter/setter。@Jrs.b我想您可以在窗口中尝试。不过我不推荐使用它。@mpen如果foo
是一个局部变量,那就没用了。