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标准的某个地方有定义。明白了,问了这个问题: