Javascript - 反映封装成员

时间:2011-09-14 19:05:28

标签: javascript oop class

我创建了一个javascript“class”,如下所示:

function MyClass(member1, member2) {
   this.Member1 = member1;
   this.Member2 = member2;
}

所有成员都是字符串。

我想通过调用

来获取MyClass的一个实例并“清理”成员
function NoneBecomesNull(item) {
    if (item === "[None]")
        item = "";
    return item;
}

for-class的每个成员。有没有一种有效的方法来完成这项任务? (在MyClass有30名成员的情况下)。

我想避免做...

myClassInstance.Member1 = NoneBecomesNull(myClassInstance.Member1);
myClassInstance.Member2 = NoneBecomesNull(myClassInstance.Member2);
//...30+ times

2 个答案:

答案 0 :(得分:4)

尝试以下

for (var name in theObject) {
  if (theObject.hasOwnProperty(name) && theObject[name] === "[None]") {
    theObject[name] = "";
  }
}

我使用hasOwnProperty来防止在原型链中重新设置属性。您的示例未在此处显示原型链的使用,因此可能不需要此示例。但这是一个很好的做法。

答案 1 :(得分:3)

为什么不将此行为封装在对象中?

WORKING EXAMPLE

function MyClass(member1, member2) {
    this.Member1 = member1;
    this.Member2 = member2;
    this.clean = function() {
        for ( var member in this ) {
            if (this.hasOwnProperty(member) && this[member] === "[None]") {
                this[member] = "";
            }
        }
    };
}

然后它只需要一行来完成......

var obj = new MyClass("[None]", "hello");

obj.clean();