所以我对javascript相当陌生,我一直在寻找使用getter和setter创建属性的方法(类似于C#属性)。
我想出了这个功能,但我不完全确定我是否遗漏了一些可能出错的东西。这是创建属性的有效方法吗?
var property = function(instance, propname, acc)
{
acc = acc || {};
acc.get = acc.get || function(val){ return val; };
acc.set = acc.set || function(set){ return set; };
var val = acc.val === undefined ? {} : acc.set(acc.val);
instance[propname] = {};
instance[propname].get = function() { return acc.get(val); };
instance[propname].set = function(set) { val = acc.set(set); };
}
用法:
var obj = {};
property(obj, 'prop1');
obj.prop1.get(); // returns Object {}
obj.prop1.set(13);
obj.prop1.get(); // returns 13
property(obj, 'prop2',
{
val : 13,
set : function(val) { return Math.min(val, 10); }
});
obj.prop2.get(); // returns 10
obj.prop2.set(122);
obj.prop2.get(); // returns 10
obj.prop2.set(3);
obj.prop2.get(); // returns 3
property(obj, 'percent',
{
val : 100,
get : function(val) { return (val * 100).toFixed(2); },
set : function(val) { return (Math.min(Math.max(val, 0), 100) / 100.0); },
});
obj.percent.get(); //returns "100.00"
obj.percent.set(33.12543);
obj.percent.get(); //returns "33.13"
obj.percent.set(122.12);
obj.percent.get(); //returns "100.00"
obj.percent.set(-122.12);
obj.percent.get(); //returns "0.00"