网站搜索

将函数分配给对象属性的 JavaScript


我正在学习一个 JavaScript 教程,并且能够完成它。但问题是我不理解其中一行代码的作用。

我有一个函数 setAge(),然后在创建一个 susan 对象之后,我把这个函数的名字设置为该对象的一个属性?我不明白为什么要这样做。我不直接使用这个函数/方法就可以了吗?

教程代码:

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

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work?  

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

答案#1

它将 susan 的属性 setAge 分配给上面定义的函数,

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

这是一个接受一个参数的函数。当调用 susan.setAge(35); 时,this 将指向调用者 susan,将她的年龄更新为 35。

混淆可能来自 setAge 被使用了两次。Susan 的函数在左侧被定义,右侧已经被定义。例如:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

作用相同。setAge 也是“可重用”的:

harry = new Object();
harry.iAmThisOld = setAge;
harry.iAmThisOld(55);

演示 http://jsfiddle.net/7JbKY/2/

答案#2

它之所以有效,是因为变量的作用域。

第一个 setAge 变量只是一个函数,你可以这样调用它:setAge(24) 它与 function setAge(age) {this.age=age} 并没有太大区别

在你声明 setAge 变量并将其内容设为一个函数之后,你可以将另一个变量设置为这个变量。你在对象中所做的就是这个。 当你写下 susan.setAge=setAge; 后,你对象的 setAge 属性将等于之前的 setAge 变量,也就是一个函数。所以,你可以调用 susan.setAge()。