したがって、私はjavascriptにかなり慣れていないため、ゲッターとセッターを使用してプロパティを作成する方法を検討しています(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"