1

非常に単純な抽象化された例ですが、オブジェクトのプロパティを更新するためupdateAge()に内部から呼び出す方法があるかどうか疑問に思っていますか? これは call() または apply() の出番ですか?doMainStuffpersonage

function doMainStuff() {
    var person = {
        name: 'Bob',
        age: 55
    }

    updateAge();
}


function updateAge(){
    person.age = 24;
}
4

3 に答える 3

2

personオブジェクトをupdateAge関数に渡す必要があります。

function doMainStuff () {
    var person = {
        name: 'Bob',
        age: 55
    };

    updateAge(person);
}


function updateAge (person) {
    person.age = 24;
}
于 2013-01-29T20:11:18.460 に答える
1

Joseph Silber の回答に加えて、JS ではすべてのオブジェクトが参照渡しされます。関数パラメーターとしてオブジェクトを配置すると、実際には同じオブジェクトへの参照が渡されます。これは、関数がパラメーター オブジェクトのプロパティを変更した場合、変更した関数呼び出しが返された後も変更されたままになることを意味します。

于 2013-01-29T20:13:33.070 に答える
1

JavaScript で適切なクラスを定義すると、それらによって定義されたメソッドを使用できます。

function Person(name, age) {
    var privateVariable = "special";
    this.name = name;
    this.age = age;
}
Person.prototype.updateAge = function() {
    this.age = 24;
}

function doStuff() {
    var person = new Person("Bob", 55);
    person.updateAge(); // will work
    person.age = 24; // will also work
    typeof(person.privateVariable) == 'undefined'; // it's only defined within the Person function/class
}
于 2013-01-29T20:21:33.800 に答える