1

超级简单的抽象示例,但我想知道是否有一种方法可以updateAge()从内部调用doMainStuff来更新person对象的age属性?这是 call() 或 apply() 发挥作用的地方吗?

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 回答