我有一个方法path
的对象。当没有参数执行方法时,我希望它像getter一样,当使用参数时 - 就像一个setter。我怎么能用js getters / setters做到这一点?这个选项似乎错了:
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 is not a function
答案 0 :(得分:3)
Getters和setter不会那样工作。当您只是访问该属性时,getter将跟进某个函数逻辑。没有必要调用一个函数,同样的事情是你不必调用函数的setter,你在尝试设置属性时也会这样做。
所以getter和setter是一个很好的写作方式:
o.getProp();
o.setProp(nValue);
要:
o.prop;
o.prop = nValue;
不要将setter逻辑与getter逻辑混合:
var __path = '/';
var o = {}
Object.defineProperty(o, 'path', {
get: function(){
return __path;
},
set: function(p){
__path = p;
}
});
console.log(o.path, __path);
o.path = '/home';
console.log(o.path, __path);

我在这个例子中使用了Object.defineProperty
,但这似乎也有效:
var o = {
get path(){
return __path;
},
set path(n){
__path = n;
}
}
答案 1 :(得分:1)
这样的事情:
if (dateFromEpochTime > dateToEpochTime) {
date = dateFrom.data("kendoDateTimePicker").value();
date.setHours(23);
date.setMinutes(59);
date.setSeconds(59);
dateTo.kendoDateTimePicker({
value: date,
format: "dd-MM-yyyy HH:mm:ss"
})
changedByCode = true;
}
} else {
if (dateFromEpochTime > dateToEpochTime) {
date = dateTo.data("kendoDateTimePicker").value();
date.setHours(00);
date.setMinutes(00);
date.setSeconds(00);
dateFrom.kendoDateTimePicker({
value: date,
format: "dd-MM-yyyy HH:mm:ss"
})
changedByCode = true;
}
}