使用Javascript范围之外的函数更新函数的内部属性?

时间:2013-01-29 20:10:43

标签: javascript

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

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

    updateAge();
}


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

3 个答案:

答案 0 :(得分:2)

您必须将person对象传递给updateAge函数:

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

    updateAge(person);
}


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

答案 1 :(得分:1)

除了Joseph Silber的答案之外:在JS中,所有对象都是通过引用传递的:如果你将一个对象作为一个函数参数放入,你实际上传入对同一个对象的引用< / em>的。这意味着如果函数更改了参数对象的属性,那么在更改它的函数调用返回后,这些属性仍会保持更改。

答案 2 :(得分: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
}