如何在将值分配给对象成员时执行函数
How to perform a function when value is assigned to an object member?
我有一个对象,约会,与成员,时间:
function appointment(date_string){
this.time = ???;
}
当我从数据库中获取时间时,它有尾随的零。我想在分配值之前删除它们。例如:
var a = new appointment("01/15/2015");
a.time = "01:33:00.000";
console.log(a.time) // should display 01:33:00, NOT 01:33:00.000
我试过了
function appoinment(date_sting) {
this.time = function(){return (this.time).replace(".000","");};
}
但这在场景中不起作用。
从 ES 5.1 (ECMA 262) 开始,您可以将 set
运算符与 Object.defineProperty 一起使用
function appointment() {
Object.defineProperty(this, 'time', {
set: function (value) {
value = value + '';
this._time = value.replace(".000","");
},
get: function () {
return this._time;
}
});
}
更新
我想出了一个更好的版本,不会污染this
范围:
function appointment() {
var time;
Object.defineProperty(this, 'time', {
set: function (value) {
value = value + '';
time = value.replace(".000","");
},
get: function () {
return time;
}
});
}
正则表达式是你最好的朋友。 :)
a.time = "01:33:00.000".replace(/'.0+$/, "");
此外,"01:33:00.000".replace(".000") 不执行任何操作的原因可能是因为您忘记指定替换方法的第二个参数:替换第一个参数的字符串:
a.time = "01:33:00.000".replace(".000", "");
不过,我建议使用正则表达式,因为它解决了尾随零数量不同的问题。 :)
编辑:好的,我明白你现在想要实现的目标;你想要一些在分配时动态解析值的东西。在这种情况下,您需要使用 Object.defineProperty:
var Appointment = function(timeString){
var _time;
Object.defineProperty(this, "time", {
get: function(){ return _time; },
set: function(i){
_time = (i || "").replace(/'.0+$/, "");
}
});
this.time = timeString;
};
console.log(new Appointment("20/08/2015").time);
公平的警告是,在本机JavaScript对象上使用Object.defineProperty在Internet Explorer 8上不起作用。因此,这种方法归结为您愿意支持哪些浏览器。
如果支持IE8(和/或更早版本)是一个问题,我建议改用老式的get/set函数:
var Appointment = function(timeString){
var _time;
this.setTime = function(i){
_time = (i || "").replace(/'.0+$/, "");
};
this.getTime = function(i){
return _time;
};
this.setTime(timeString);
};
console.log(new Appointment("20/08/2015 1:33:00.000").getTime());
相关文章:
- 如何将从XML读取的值存储到本地对象's成员使用.get()函数
- Javascript映射对象成员以返回新的扁平对象
- 如何访问对象's成员通过另一种方法填充的方法
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- CakePHP错误:在非对象上调用成员函数get(),使用cakejavascript助手时出错
- JavaScript 对象中的私有成员,带有 getter 和 setter
- 对象'未设置的数据成员值
- 控制台返回[Object-Object]而不是对象成员
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 从JavaScript对象访问数据's数组成员变量
- 对象属性不是在工厂成员函数内部创建的
- 在 JavaScript 中,如何有条件地向对象添加成员
- 如何在 Javascript 中将函数绑定到对象数据成员的更改
- 为什么在访问一个新对象的成员之前将其括在括号中
- console.log表示,当我调用对象的任何成员时,对象都是未定义的
- 如何使用正则表达式查找对象成员名称
- 如何向对象添加函数并引用其成员
- 访问javascript中对象类型的数组成员
- 在对象内部使用 for-in 循环来访问其成员
- 如何使用 Object.create() 而不是 new 创建具有私有成员的对象