在A" Class"中定义一个函数并称它为打印阵列元素

时间:2015-10-21 14:21:05

标签: javascript arrays

我有一个明确的班级"汽车"我需要添加一个接受布尔参数的函数,并根据输入生成输出。我的想法是在Automobile类中定义函数:

function Automobile(year, make, model, type) {
    this.year = year; //integer (ex. 2001, 1995)
    this.make = make; //string (ex. Honda, Ford)
    this.model = model; //string (ex. Accord, Focus)
    this.type = type; //string (ex. Pickup, SUV)

    function logMe(boolAnswer) {
        if (boolAnswer == true) {
            console.log(this.year + ' ' + this.make + ' ' + this.model + ' ' + this.type);
        } else {
            console.log(this.year + ' ' + this.make + ' ' + this.model);
        }
    };

}

var automobiles = [
    new Automobile(1995, "Honda", "Accord", "Sedan"),
    new Automobile(1990, "Ford", "F-150", "Pickup"),
    new Automobile(2000, "GMC", "Tahoe", "SUV"),
    new Automobile(2010, "Toyota", "Tacoma", "Pickup"),
    new Automobile(2005, "Lotus", "Elise", "Roadster"),
    new Automobile(2008, "Subaru", "Outback", "Wagon")
];

然后通过调用:

对汽车进行排序并打印已排序的数组
var newArray = sortArr(yearComparator, automobiles);

newArray.forEach(logMe(true));

然而,当我这样做时,它表示没有定义logMe。我是否需要更改我定义logMe的方式并使其成为原型?我很困惑如何在汽车中定义这个功能?

1 个答案:

答案 0 :(得分:0)

您的方法

您需要将logMe设置为this上的属性,就像数据一样:

this.logMe = function logMe(boolAnswer) {

然后该功能仍然无法从外部获得。您需要从值中实际获得它:

newArray.forEach((obj) => obj.logMe(true));

原型

或者,如果您选择使用prototype机制,则可以将logMe移到构造函数之外:

Automobile.prototype.logMe = function logMe() { ...

然后你可以直接在forEach中使用它:

newArray.forEach(Automobile.prototype.logMe)

但是如果你想传递一个参数,你需要更精细的摆弄,所以我只能留在lambda。

备注

正如 @plalx 指出的那样,logMe函数不属于此处。如果有的话,toString将是更好的选择;然后你可以使用该值来实际记录对象。