定义JavaScript对象的属性

时间:2013-01-31 18:33:34

标签: javascript

对于属性的getter和setter声明是否正确且最有效?

var AxisRange = (function(){
    function AxisRange(){
        this._userMaxValue = 0.0;

        Object.defineProperty(AxisRange.prototype, "UserMaxValue", {
            get : function(){
                return this._userMaxValue;
            },
            set  : function(value){
                if(value != this._userMaxValue){
                    this._userMaxValue = value;
                    this.validateUserMaxValue();
                    this.validateUserStep();

                    this.synchronizeActualRange();
                }
            }
        });
    }

    AxisRange.prototype.validateUserMaxValue = function(){
        alert("validateUserMaxValue");
    };

    return AxisRange;
})();

另外,我正在使用JetBrains WebStorm编写我的JS代码,它警告我

    AxisRange.prototype中使用的
  1. Object.defineProperty不能分配给参数类型Object。
  2. 第(li)行if(value != this._userMaxValue)表示“可能无效使用此内容”。

    在进一步使用代码输入之前,我需要确保我使用的是正确的。

1 个答案:

答案 0 :(得分:0)

您在构造函数中定义了一个prototype属性。这意味着每次创建新的AxisRange对象时都会重新定义它。将其移出构造函数。

您也可能希望摆脱该闭包,因为您没有使用它来命名任何局部变量,这会使尝试优化您的JavaScript变得复杂。 (如果您使用过谷歌闭包编译器会特别抱怨。)