Javascript 使用setter/getter获取/更新值
我有一个方法为Javascript 使用setter/getter获取/更新值,javascript,Javascript,我有一个方法为路径的对象。当方法在没有参数的情况下执行时,我希望它像getter一样工作,而使用参数时,它像setter一样工作。如何使用js getter/setter实现这一点?这个选项似乎是错误的: var o = { get path(p) { if (p === undefined) { return _path; } else { return _path=p; } } } 如果我这样定义一个对象: var o
路径的对象
。当方法在没有参数的情况下执行时,我希望它像getter一样工作,而使用参数时,它像setter一样工作。如何使用js getter/setter实现这一点?这个选项似乎是错误的:
var o = {
get path(p) {
if (p === undefined) {
return _path;
} else {
return _path=p;
}
}
}
如果我这样定义一个对象:
var o = {
get path() {
return _path;
}
set path() {
_path=p;
}
}
然后将其设置为o.path(“some”)
,浏览器(Chrome)执行getter,然后抛出o.path不是一个函数
类似这样的东西:
function path(p) {
if (p) {
_path = p;
return p;
} else {
return _path;
}
}
大概是这样的:
function path(p) {
if (p) {
_path = p;
return p;
} else {
return _path;
}
}
能手和二传手不是那样的。当您仅访问属性时,getter将遵循特定的函数逻辑。不需要调用函数,同样的事情也适用于setter,您不必调用函数,您可以在尝试设置属性时这样做 因此,getter和setter是一种很好的写作方式:
o.getProp();
o.setProp(nValue);
致:
不要将setter逻辑与getter逻辑混合使用:
var_uu路径='/';
var o={}
Object.defineProperty(o,'路径'{
get:function(){
返回路径;
},
集合:功能(p){
__path=p;
}
});
日志(o.path,_路径);
o、 路径='/home';
日志(o.path,_路径)代码>getter和setter不是这样工作的。当您仅访问属性时,getter将遵循特定的函数逻辑。不需要调用函数,同样的事情也适用于setter,您不必调用函数,您可以在尝试设置属性时这样做
因此,getter和setter是一种很好的写作方式:
o.getProp();
o.setProp(nValue);
致:
不要将setter逻辑与getter逻辑混合使用:
var_uu路径='/';
var o={}
Object.defineProperty(o,'路径'{
get:function(){
返回路径;
},
集合:功能(p){
__path=p;
}
});
日志(o.path,_路径);
o、 路径='/home';
日志(o.path,_路径)代码>我认为您的逻辑是反向的,if(p).
应该做设置我认为您的逻辑是反向的,if(p).
应该做设置setting@apsillers,语法有什么问题。我更新了代码您是否试图在get
中设置逻辑?@MinusFour,不,这是显而易见的解决方案,但似乎是错误的。我想知道当具有相同名称的方法同时充当setter和getter时,如何使用getter/setter。对于相同的属性,可以同时使用setter和getter。这并不意味着你必须在一个逻辑中融入逻辑。还要注意的是,getter不能有参数。Javascript(ECMAScript 5)getter和setter[1]用于修改当您尝试访问或更改属性时发生的情况,比如说:console.log(myObj.foo)
或myObj.foo=4
。我不相信它们可以用来定义当你访问一个函数时会发生什么。幸运的是,您可以将函数定义为对象的属性来解决问题!(参见Cyril和davcs86的答案)脚注[1]:@apsillers,语法有什么问题。我更新了代码您是否试图在get
中设置逻辑?@MinusFour,不,这是显而易见的解决方案,但似乎是错误的。我想知道当具有相同名称的方法同时充当setter和getter时,如何使用getter/setter。对于相同的属性,可以同时使用setter和getter。这并不意味着你必须在一个逻辑中融入逻辑。还要注意的是,getter不能有参数。Javascript(ECMAScript 5)getter和setter[1]用于修改当您尝试访问或更改属性时发生的情况,比如说:console.log(myObj.foo)
或myObj.foo=4
。我不相信它们可以用来定义当你访问一个函数时会发生什么。幸运的是,您可以将函数定义为对象的属性来解决问题!(参见Cyril和davcs86的答案)脚注[1]:谢谢,这是我犯的一个愚蠢的错误。我知道你的计划。我最近刚开始使用getter和setter,偶尔会将它们作为函数调用(如前所述)。js如何知道是调用getter还是setter?如果有参数——这是一个设置器?这是一个非常有趣的问题,不幸的是,我不知道确切的答案。这绝对值得一提,因为getter和setter在原型链中的行为可能有些怪异。它在ES标准的某个地方有定义。明白了,问了你一个问题:谢谢,这是我的一个愚蠢的错误。我知道你的计划。我最近刚开始使用getter和setter,偶尔会将它们作为函数调用(如前所述)。js如何知道是调用getter还是setter?如果有参数——这是一个设置器?这是一个非常有趣的问题,不幸的是,我不知道确切的答案。这绝对值得一提,因为getter和setter在原型链中的行为可能有些怪异。不过,它在ES标准的某个地方有定义。明白了,问了这个问题: