在JavaScript中定义哈希成员的setter

时间:2010-10-31 16:17:18

标签: javascript setter

我的哈希定义如下:

var props = {
    id: null,
    title: null,
    status: null
};

我想为状态字段定义setter(并且只为它定义),如下所示:

props.__defineSetter__("status", function(val){
    //Checking correctness of val...
    status = val;
});

但它不起作用:( 那么,做到这一点的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

很简单,你需要使用

this.status = val;

否则,您只是将不相关的全局变量status设置为val

如前所述,IE中没有实现setter / getter。

另外,我不确定有一个与它设置的属性同名的setter是多么明智。不确定这是否会导致冲突,但这似乎是一个坏主意是吗?理想情况下,要设置的变量应该隐藏在闭包

var props = {
  id: null,
  title: null
};

(function() {

  var status;
  props.__defineSetter__("status", function(val){
    //Checking correctness of val...
    status = val;
  });

  props.__defineGetter__('status', function() { return status; });

}());

这样,status可以完全免受直接访问,这是使用setter和getter的重点。

答案 1 :(得分:2)

首先,MooGoo指出了什么。但是,您也不能使用与对象中现有变量相同的名称将属性设置器分配给对象。

所以你的代码必须是这个问题:

var props = {
    id: null,
    title: null,
    hStatus: null,
};

props.__defineSetter__("status", function(v){
    this.hStatus = v;
});

props.__defineGetter__("status", function(){
    return this.hStatus;
});

[编辑] 是的,MooGoo更快地编写了他的答案,然后我写了这个8(。

答案 2 :(得分:0)

这应该有效:

props.__setStatus__ = function(val) {
    // Check correctness of val
    this.status = val;
}

用法:

props.__setStatus__('Alive');