【发布时间】:2011-12-22 08:42:21
【问题描述】:
假设我创建了一个自定义对象/javascript“类”(airquotes),如下所示:
// Constructor
function CustomObject(stringParam) {
var privateProperty = stringParam;
// Accessor
this.privilegedGetMethod = function() {
return privateProperty;
}
// Mutator
this.privilegedSetMethod = function(newStringParam) {
privateProperty = newStringParam;
}
}
然后我想列出这些自定义对象,以便我可以轻松地从该列表中添加或删除内容。我决定使用对象作为存储自定义对象列表的一种方式,因此我可以将自定义对象添加到列表中
var customObjectInstance1 = new CustomObject('someString');
var customObjectInstance2 = new CustomObject('someOtherString');
var customObjectInstance3 = new CustomObject('yetAnotherString');
myListOfCustomObjects[customObjectInstance1] = true;
myListOfCustomObjects[customObjectInstance2] = true;
myListOfCustomObjects[customObjectInstance3] = true;
并从列表中删除自定义对象
delete myListOfCustomObjects[customObjectInstance1];
但如果我尝试用
遍历列表for (i in myListOfCustomObjects) {
alert(i.privilegedGetMethod());
}
我会在 FireBug 控制台中收到一条错误消息,提示“i.privilegedGetMethod() 不是函数”。有没有办法解决这个问题或javascript中的成语来做我想做的事?抱歉,如果这是一个愚蠢的问题,但我是 javascript 的新手,并且已经在互联网上搜索了我的问题的解决方案,但无济于事。任何帮助将不胜感激!
附:我意识到我的示例非常简化,我可以使用 this.property 或其他东西将 privateProperty 公开,但是我仍然会在警报中未定义,我想将其封装起来。
【问题讨论】:
-
我不太确定您要在这里完成什么,但是您的代码不应该也不会工作,因为那里有语法错误。特别是你用
[]而不是()调用构造函数的方式。 -
抱歉,打错了。我固定了括号
-
基本上我正在寻找一种方法来创建自定义对象列表并遍历它们,同时保持对其特权方法的访问。
-
你为什么要为你的数组创建自定义对象索引呢?只需将它们放入数组中,如下所示:
array.push(customObject);,然后使用标准的for循环遍历数组。 -
我试图远离数组,因为我不知道按值删除项目的简单方法(我必须遍历数组,对吗?)。对于对象,我可以通过“if (something in object)”轻松检查是否存在某些东西。
标签: javascript object properties iteration encapsulation