JavaScript将函数赋值给对象属性

6

我正在学习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); 
4个回答

8

这里是将 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/


0

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

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

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


0

让我们看看代码中做了什么-

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

这里定义了一个函数,调用该函数时将对象的变量age更改为指定的变量。

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge;

在这里,我们将预定义的值设置为susan.age,该值将由函数更改,并将函数的值设置为变量susan.mynewageis,以便在任何其他情况下下次使用该函数。

susan.mynewageis(35);

在调用函数时,我们将susan.age的值设置为35。

我本来要发布这个答案,但不小心按下了提交按钮,发布了不完整的答案。


-1

这个问题与作用域或闭包无关。它关于函数在 JavaScript 中就像任何其他对象一样的事实。因此,它们可以作为参数传递,分配给变量等。 - jatrim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接