2012-02-03 82 views
0

我基本上试图在JavaScript中创建一个通用对象,我可以使用它来充当联合数组。
但我想给这个对象一些自定义成员能够对给定对象进行操作。针头说我失败了,希望有人能指引我走向正确的方向。在javascript中使用私有成员函数的对象操作

这是我谈论的通用对象。

function easeArray() { 
    this.valIndex = function(searchTerm,object) { 
     //searchTerm+object; 
     if (searchTerm in object) { 
      return "true" + object[searchTerm] 
     } 
    } 
} 

那么我试着像这样初始化它。

 var myCollection = new easeArray(); 
    myCollection = {"dioxanes": 0, "shunning": 1, "plowed": 2, 
     "hoodlumism": 3, "cull": 4,  "learnings": 5, 
     "transmutes": 6, "cornels": 7, "undergrowths": 8, 
     "hobble": 9,  "peplumed": 10, "fluffily": 11, 
     "leadoff": 12, "dilemmas": 13, "firers": 14, 
     "farmworks": 15, "anterior": 16, "flagpole": 17}; 

这工作得很好,但是当我尝试做这样的事情:

alert(myCollection.valIndex()) 

我得到一个错误。 类型错误:对象不支持属性或方法。

没关系,我没有将值传递给函数我明白,函数甚至不承认。

我的最终结果是有一个通用的对象,我可以初始化和键值对填满,然后简单地说object.valindex("searchTerm");

任何帮助将不胜感激。

+2

您的重新分配所述MyCollection的变量为不同的值 - 使用方法/构造将值传递 – ManseUK 2012-02-03 12:05:38

+0

“填充”该对象的数据将没问题,但正如ManseUK所说,你不会向myCollection添加任何东西,你会用新的值重写它。如果我有一个数组'a = [1,2]',那么'a = 3'不会给数组添加'3',它只是将'a'设置为指向'3'而不是数组。这是基本的变量分配。我也不明白这与“私人成员”有什么关系(反正JS中不存在)。 – 2012-02-03 12:09:56

回答

1

这不可能,因为在最新的声明中工作,你摧毁你easeArray对象的实例。因此,阵列还没有这样的方法定义

尝试此代码,而不是

var easeArray = function(obj) { 
    this.obj = obj 
    this.valIndex = function(searchTerm) { 
     if (searchTerm in this.obj) { 
      return "true" + this.obj[searchTerm]; 
     } 
    } 
} 

var myCollection = new easeArray({ 
     "dioxanes": 0, "shunning": 1, "plowed": 2, 
     "hoodlumism": 3, "cull": 4,  "learnings": 5, 
     "transmutes": 6, "cornels": 7, "undergrowths": 8, 
     "hobble": 9,  "peplumed": 10, "fluffily": 11, 
     "leadoff": 12, "dilemmas": 13, "firers": 14, 
     "farmworks": 15, "anterior": 16, "flagpole": 17 
    }); 

    myCollection.valIndex("firers"); /* this returns "true14" */ 
+0

非常感谢您的解释我是一个恢复动作成瘾者,它开始显示。我没有意识到我基本上压倒了价值。我试图做一个变量,以键入easeArray,我显然设法搞砸在更多的方式。 – user677275 2012-02-03 13:55:05

1

在这行代码:

 var myCollection = new easeArray(); 

您设置变量“MyCollection的”对你构建一个新的对象的引用。然后,在下一行:

 myCollection = {"dioxanes": 0, "shunning": 1, "plowed": 2, ... 

你相同的变量设置为一个不同对象的引用。你在第一个陈述中建立的那个在那时已经消失了。

您需要做的是将一些方法添加到“easeArray”类中,以便根据需要将值存储到其中。鉴于你发布的例子,我不知道你为什么需要这个“valIndex”函数。如果你简单地引用这些字符串之一:

 var index = myCollection["dioxanes"]; 

你会看到“指数”为0