1

Personクラスを作成しようとしています。その人の年齢は、if/elseステートメントによって決定される乱数になります。今のところ、関数をオブジェクトの外に配置するか、別のキーとして配置した場合にのみ機能するようです。

function age(x) {
    if (x.toLowerCase().charCodeAt(0) <= "g".charCodeAt(0)) {
        return Math.floor(Math.random()*40+1);
    }
    else {
        return Math.floor(Math.random()*40+41);
    }
}

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

var people = {
    joe: new person("Joe")
};

console.log(people.joe.age);
\\ returns a number 41-80

関数を「this.age」キーに直接入れて、同じことを次のように行う方法はありますか?

function person(name) {
    this.name = name;
    this.age = function age() {
        if (this.name.toLowerCase().charCodeAt(0) <= "g".charCodeAt(0)) {
            return Math.floor(Math.random()*40+1);
        }
        else {
            return Math.floor(Math.random()*40+41);
        }
};
4

3 に答える 3

5

関数をすぐに実行できます。

function person(name) {
    this.name = name;
    this.age = (function age() {
        if (this.name.toLowerCase().charCodeAt(0) <= "g".charCodeAt(0)) {
            return Math.floor(Math.random()*40+1);
        }
        else {
            return Math.floor(Math.random()*40+41);
        }
    })();
};
于 2013-02-28T23:10:18.677 に答える
4
function person(name) {
    this.name = name;
    this.age = (function age() {
        var x = this.name.toLowerCase().charCodeAt(0) <= "g".charCodeAt(0))?1:41;
        return Math.floor(Math.random()*40+x);
        })();
};

(function(){})()あなたはそれを実行しています。

(function(){}) //this converts the function into a statement
() // this executes
于 2013-02-28T23:09:52.093 に答える
2

クロージャー (関数) を定義し、すぐに実行する必要があります。

  function person(name) {
        this.name = name;
        this.age = (function age() {
            var x = this.name.toLowerCase().charCodeAt(0) <= "g".charCodeAt(0)) ? 1 : 41;
                return Math.floor(Math.random()*40+x);
            })();
    };
于 2013-02-28T23:11:25.353 に答える