更新:谢谢@Mathletics-我应该在对象文字符号内使用=时使用了:setAge: setAge在对象文字内部完美工作。

在Codecademy JavaScript轨道中,发生以下问题:

// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
  this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
bob.setAge = setAge;

// make susan here, and first give her an age of 25
//var susan = {age: 25, setAge = setAge}; //does not work
var susan = new Object();
susan.age = 25;
susan.setAge = setAge;

// here, update Susan's age to 35 using the method
susan.setAge(35);


我想将susan.setAge设置为全局函数setAge。当我尝试使用对象文字符号执行此操作时,它不起作用,但是如果我使用new然后使用点符号,则它起作用了。

我也在对象文字符号内尝试了setAge = global.setAge,但是失败了。 setAge = this.setAgefunction setAge = setAgefunction setAge = this.setAgefunction setAge = global.setAge均也失败。

我尝试研究有关堆栈溢出的相关问题,但those weren't与此相关。而this question虽然是一个类似的例子,但似乎与作者在对象内创建方法和使用.apply()调用全局方法之间的混淆有关,他或她似乎没有意识到。

最佳答案

您的语法错误:

var susan = {age: 25, setAge : setAge}; // : instead of =
susan.setAge(35);
console.log(susan.age) // will show 35

您还可以尝试其他方法:
function Person(params){
    params=params || {};
    this.age=params.hasOwnProperty("age") ? params.age : null;

    this.setAge=function(age){
        this.age=age;
    }
}

var susan = new Person({age:25});
susan.setAge(35);
console.log(susan.age) // outputs 35

如前所述,使用参数可以节省几行内容,因为它始终是一个对象:
function Person(){
    this.age=arguments.hasOwnProperty("age") ? arguments["age"] : null;
    this.setAge=function(age){
        this.age=age;
    }
}

07-28 10:49