超级简单的抽象示例,但我想知道是否有一种方法可以从updateAge()
内调用doMainStuff
来更新person
对象的age
属性?这是call()或apply()发挥作用的地方吗?
function doMainStuff() {
var person = {
name: 'Bob',
age: 55
}
updateAge();
}
function updateAge(){
person.age = 24;
}
答案 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
}