3

関数getOlder()で次のエラーが発生します:
TypeError:未定義のプロパティ'age'を読み取れません

問題とその修正方法は何ですか?

function person(name, age) {
    this.name=name;
    this.age=age
}

// Returns the older person in a group of persons.
var getOlder = function(people) {
    if (people.length === 0) {
        return new person();
    }

    var older = people[0]; // The first one is the older for now.

    var value;
    for (var _ in people) {
        value = people[_];
        if (value.age > older.age) {
            older = value;
        }
    }
    return older;
};

// Declare some persons.
var paul = new person("Paul", 23);
var jim = new person("Jim", 24);
var sam = new person("Sam", 84);
var rob = new person("Rob", 54);
var karl = new person("Karl", 19);

var older = getOlder(paul, jim);
if (older.name !== "Jim") {
    console.log("Fail");
}
4

2 に答える 2

5

関数のシグネチャを見てください。

var getOlder = function(people) {

2人のオブジェクトを受け入れるように関数を作成していません。関数内で使用people.lengthしているため、配列のみを受け入れるようです。people[0]したがって、配列も渡す必要があります。

var older = getOlder([paul, jim]);
于 2012-10-21T10:10:13.247 に答える
1
var getOlder = function() {
    var people = arguments;
    if (people.length === 0) {
        return new person();
    }

    var older = people[0]; // The first one is the older for now.

    var value;
    for (var _ in people) {
        value = people[_];
        if (value.age > older.age) {
            older = value;
        }
    }
    return older;
   };

関数定義で引数を受け入れず、JSの可変引数機能に依存することで、を呼び出す必要がなくなりますgetOlder(paul, jim)

引数はすべての関数のプロパティであり、基本的には。の呼び出し中に提供される変数引数の配列です。

于 2012-10-21T10:29:08.163 に答える