0
所以我相當新的JavaScript和我一直在尋找方式來創建屬性與getter和setter(類似於C#屬性)。屬性的此JavaScript實現是否有效?
我想出了這個功能,但我不完全確定是否我錯過了一些可能會出錯的東西。這是創建屬性的有效方法嗎?
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"
難道你的意思是,如果acc.val是未定義的?你是對的,我錯過了錯誤檢查。我沒有嘗試定義一個沒有定義val的set方法。我會更新這個問題。 – Alex