var obj = {
get foo(){//Why can't I use argument ^!^
return 'getter';
},
set foo(value){
console.log('setter: '+value);
}
}
> obj.foo = 'bla'
setter: bla
>obj.foo
'getter'
所以,我想在设置时得到foo的值:
>obj.foo = 'bla'
setter: bla
>obj.foo
getter: bla
像这样使用:
get foo(value){//but alas, I can't use any argument in getter
return 'getter: '+value;
}
我们能否获得我们设定的价值?我想我不理解访问者的用法,为什么我们专门用它?
答案 0 :(得分:2)
可能会更多地向你解释
var obj = {
get foo(){
console.log('getter');
return this._foo;},
set foo(v){
console.log('setter');
this._foo = v;
}
}
从传递参数的对象获取值不会意味着什么 设置传递参数的值意味着代表需要设置的值。
Chrome控制台。初始化对象
obj.foo = "UI"
setter
"UI"
obj.foo
getter
"UI"
答案 1 :(得分:0)
getter只是在对该属性的所有赋值期间应用其他逻辑。作为getter
,它接收参数没有意义,因为在get操作期间没有机会传递参数。
如果您希望getter
和setter
使用属性的当前值,您需要做的是将其存储在getter和setter都可以访问的位置。
这可以在同一个对象上,在不同的对象上,也可以通过闭包引用变量。
var obj = {
get foo(){
return this.___foo___
},
set foo(value){
this.___foo___ = value;
}
}
现在,get
和set
只是对___foo___
属性的受控访问。
答案 2 :(得分:0)
当你需要为属性实现一些非标准逻辑时,你需要setter / getters 例如,下一个对象会累积所有分配:
var obj = {
_a:0,
get a(){ return this._a;},
set a(value){this._a+=value;}
}
obj.a = 5;
obj.a = 7;
obj.a
12
这也很有用,当你想写一些代理对象时,
例如,getter从远程服务器解析数据,setter将数据发布到它。
如果您需要简单的财产,请使用
{a:0}
而不是
{_a:0,get a(){return this._a;},set a(v){this._a=v;}}
其他代码段,js' privates':
function Obj(key) {
var private = 0;
var authorized = false;
return {
set token(v) {authorized = (v===key);},
set data(v) {if(authorized) private = v;}
get data() {return authorized?private:undefined;}
}
}
obj = new Obj('pass');
obj.data = 5; // no effect
obj.token = 'pass';
obj.data = 'Data'; //Now works!
///...