Javascript 在“中定义函数”;“类”;并调用它来打印数组元素

Javascript 在“中定义函数”;“类”;并调用它来打印数组元素,javascript,arrays,Javascript,Arrays,我有一个定义的类“Automobiles”,我需要添加一个函数,该函数接受布尔参数并根据输入生成输出。我的想法是在汽车类中定义函数: 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.

我有一个定义的类“Automobiles”,我需要添加一个函数,该函数接受布尔参数并根据输入生成输出。我的想法是在汽车类中定义函数:

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的方式并使其成为原型?我不知道该如何在汽车中定义此函数?

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

this.logMe = function logMe(boolAnswer) {
然后,该功能仍然无法从外部获得。您需要实际从值中获取它:

newArray.forEach((obj) => obj.logMe(true));
原型 或者,如果您选择使用
原型
机制,您可以将
logMe
移动到构造函数之外:

Automobile.prototype.logMe = function logMe() { ...
然后您可以直接在
forEach
中使用它:

newArray.forEach(Automobile.prototype.logMe)
但若你们想传递一个参数,你们需要一些更精细的摆弄,所以我只想用lambda

评论 正如@plalx指出的,
logMe
函数不属于这里。如果有的话,
toString
会是一个更好的选择;然后您可以使用该值实际记录对象。

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

this.logMe = function logMe(boolAnswer) {
然后,该功能仍然无法从外部获得。您需要实际从值中获取它:

newArray.forEach((obj) => obj.logMe(true));
原型 或者,如果您选择使用
原型
机制,您可以将
logMe
移动到构造函数之外:

Automobile.prototype.logMe = function logMe() { ...
然后您可以直接在
forEach
中使用它:

newArray.forEach(Automobile.prototype.logMe)
但若你们想传递一个参数,你们需要一些更精细的摆弄,所以我只想用lambda

评论
正如@plalx指出的,
logMe
函数不属于这里。如果有的话,
toString
会是一个更好的选择;然后,您可以使用该值来实际记录对象。

您已经在构造函数中定义了logMe,将
logMe
移动到
Automobile
之外,在业务对象上使用
logMe
方法是一个可怕的想法。我知道这是为了学习,但日志记录与汽车无关。数据结构应该没有基础设施方面的问题。@plalx我同意,
toString
会更好。您已经在构造函数中定义了logMe,将
logMe
移动到
Automobile
之外在业务对象上使用
logMe
方法是一个可怕的想法。我知道这是为了学习,但日志记录与汽车无关。数据结构应该没有基础设施方面的问题。@plalx我同意,
toString
会更好。