6

I'm going through a JavaScript tutorial and I'm able to complete it. But the problem is that I don't understand what one of the lines is doing. I have a function setAge() and then later after creating a susan object I set one of the properties to that object as the name of the function? I don't understand why this is done. Wouldn't I be able to use the function/method without doing this?

The tutorial code:

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

4 回答 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/

于 2012-06-09T19:37:35.050 回答
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。

我打算发布这个答案,但我错误地按下了提交按钮并发布了不完整的答案。

于 2012-06-09T20:14:14.123 回答
0

它的工作原理是可变范围。

第一个setAge变量只是一个函数,你可以这样称呼它:setAge(24) 它与function setAge(age) {this.age = age}

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

于 2012-06-09T19:37:12.057 回答
-1

这是范围和结束的问题。有关这方面的更多信息,我建议您阅读这篇文章: http: //nesj.net/blog/2012/03/javascript-scope-and-closure/

于 2012-06-09T19:36:18.767 回答