我正在阅读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);
答案 0 :(得分: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);
答案 1 :(得分:0)
它的作用是因为范围可变。
第一个setAge
变量只是一个函数,您可以将其称为:setAge(24)
它与function setAge(age) {this.age = age}
声明setAge变量并将其内容设置为函数后,可以为此变量设置另一个变量。你在对象中做的就是这个。在您编写susan.setAge = setAge;
之后,您的对象的setAge属性将等于之前的setAge变量,该变量是一个函数。因此,您可以致电susan.setAge()
。
答案 2 :(得分:0)
让我们看看代码中做了什么 -
var setAge = function (newAge) {
this.age = newAge;
};
这里定义了一个函数,它将对象的变量age变为调用函数时指定的变量age。
var susan = new Object();
susan.age = 25;
susan.mynewageis = setAge;
这里我们正在为susan.age设置一个预定义的值,该值将由函数更改,我们将函数的值设置为变量susan.mynewageis,以便在下次任何其他情况下使该函数可用。
susan.mynewageis(35);
这里我们在调用函数时将susan.age的值设置为35。
我打算发布这个答案但错误地按下了提交按钮并发布了不完整的答案。
答案 3 :(得分:-1)
这是范围和结束的问题。有关这方面的更多信息,我建议你阅读这篇文章: http://nesj.net/blog/2012/03/javascript-scope-and-closure/