为什么使用访问器(getters 和 setters)
why to use accessor ( getters and setters)?
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;
}
我们能不能得到我们设定的值吗?我想我不了解访问器的用法,为什么我们专门使用它?
也许
这会向你解释更多
var obj = {
get foo(){
console.log('getter');
return this._foo;},
set foo(v){
console.log('setter');
this._foo = v;
}
}
虽然从传递参数的对象中获取值没有任何意义。
而设置传递参数的值将意味着并表示需要设置的值。
铬控制台。AFter 初始化对象
obj.foo = "UI"
setter
"UI"
obj.foo
getter
"UI"
getter 只是为了在对该属性的所有赋值期间应用其他逻辑。作为getter
,它接收参数没有意义,因为在获取操作期间没有机会传递一个参数。
如果您希望 getter
和 setter
使用属性的当前值,您需要做的是将其存储在 getter 和 setter 都可以访问的位置。
这可以是在同一对象上,在不同的对象上,或者通过闭包引用变量。
var obj = {
get foo(){
return this.___foo___
},
set foo(value){
this.___foo___ = value;
}
}
所以现在get
和set
只是对___foo___
财产的受控访问。
当你需要为属性实现一些非标准逻辑时,你需要 setter/getter。
例如,下一个对象累积所有赋值:
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!
///...
相关文章:
- Google闭包和生成的getters/ssetter
- Can't get setters/getters to work
- 用一个数组应用Chai可链接的getters
- JavaScript Getters and Setters issue
- 使用框架/语言中的getter/setter,或者定义自己的显式getter/setters
- 在knockoutjs绑定中使用setters函数
- setters and getters in javascript
- Javascript Getters And Setters
- JS getters:定义属性替换或补充旧的内联“get”“set”语法
- 使用 getter 和 setters vs 在 javascript 中定义属性
- 为什么使用访问器(getters 和 setters)
- Javascript getter/setters的奇怪行为
- Getters and setters in javascript
- Getters and Setters on angular.extend $scope
- Javascript OOP, getters, setters, run - D3.js - 通过选项设置使图形可重用
- 节点模块作为getters和setters提供
- Getters and Setters in AngularJS
- JavaScript中的Getters和Setters(语法正确吗?)
- 你能在Javascript代码中使用setters和getters吗?
- Javascript getters and setters - recursion issue