1

我不完全确定如何问这个问题,因为我只是在 Javascript 中学习 OOP,但它是这样的:

我试图能够为具有相同变量的所有对象进行调用(最终能够排序)。下面是一个示例:

function animal(name, numLegs, option2, option3){
    this.name = name;
    this.numLegs = numLegs;
    this.option2 = option2;
    this.option3 = option3;
}

var human = new animal(Human, 2, example1, example2);
var horse = new animal(Horse, 4, example1, example2);
var dog = new animal(Dog, 4, example1, example2);

使用这个例子,我希望能够做一个 console.log() 并显示所有有 4 条腿的动物名称。(应该只显示马和狗,当然......)

我最终希望能够使用此信息制作一个下拉列表或过滤搜索列表。我会用 php 和 mySQL 来做这件事,但我这样做是为了在 javascript 中学习 OOP。

我只在这里问,因为我不知道该问什么。谢谢!

4

3 回答 3

3

您可以像这样编写一个通用函数:

function findSamePropVal(arry, prop, val)​{
    var output = [], i, len = arry.length, item;

    for (i = 0; i < len; i++){
        item = arry[i];

        if (prop in item && item[prop] == val)
            output.push(item);
    }
    return output;
}

你会像这样使用它:

var animals = [];
animals.push(new Animal('Human', 2, 'example1', 'example2'));
animals.push(new Animal('Horse', 4, 'example1', 'example2'));
animals.push(new Animal('Dog', 4, 'example1', 'example2'));​​​​​​
var fourLegged = findSamePropVal(animals, "numLegs", 4);   

这是一个展示它的小提琴:http: //jsfiddle.net/cEXju/

findSamePropVal也可以使用 Array.filter 编写(根据@Alnitak的建议):

function findSamePropVal(arry, prop, val){    
    return arry.filter(function(ele){
        return prop in ele && ele[prop] === val;
    });
}

您可以在此处查看更改后的findSamePropVal工作版本:http: //jsfiddle.net/cEXju/1/

于 2012-09-20T21:48:21.657 回答
1

您需要将所有animals 保存到一个数组中,没有办法(至少我认为没有)来获取所有 created animals。

然后只需遍历数组并检查您想要的值。

于 2012-09-20T21:40:07.067 回答
1

好吧,除非您将它们放在某个地方,否则没有真正的方法可以了解您刚刚制作的所有这些“动物”对象。听起来完成您想要的最佳方法是将它们全部存储在一个数组中,然后当您只想获得具有 4 条腿的数组时迭代该数组。

例如:

for (var i = 0; i < animals.length; ++i) {
    if (animals[i].numLegs === 4) console.log(animals[i]);
}
于 2012-09-20T21:41:06.237 回答