【问题标题】:Is this javascript implementation of properties valid?这个属性的 javascript 实现是否有效?
【发布时间】:2013-07-12 01:10:33
【问题描述】:

所以我对 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"

【问题讨论】:

    标签: javascript properties implementation setter getter


    【解决方案1】:

    我仍在阅读,但我可以告诉你这是错误的

    var val =  acc.set(acc.val) || {}; 
    

    如果acc.setundefined 它会抛出一个错误,你需要检查它是否设置 在你尝试像这样使用它之前

    var val =  acc.set && acc.set(acc.val) || {}; 
    

    【讨论】:

    • 你不是说 acc.val 没有定义吗?你是对的,我错过了那个错误检查。我没有尝试在不定义 val 的情况下定义 set 方法。我会更新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2010-12-04
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多