在Pro javascript技术书
中找到了这个例子function User( name, age ) {
var year = (new Date()).getFullYear()-age;
this.getYearBorn = function(){
return year;
};
}
var user = new User( "Bob", 44 );
alert(user.getYearBorn()); //system date is 2010 ,alerts 1967
我将系统日期更改为2012
alert(user.getYearBorn()); //alerts 1968.
根据以上逻辑,我编写了以下代码
function Test(bornTime){
var ageInMillis = new Date().getTime()-bornTime.getTime();
this.age = function(){
console.log("age:"+ageInMillis);
}
}
var t = new Test(new Date());
t.age(); //output is zero
setTimeout(t.age,1000) // it prints 0
不应该第二次调用t.age打印1000, 我做错了什么?
答案 0 :(得分:2)
您不会重新计算ageInMillis
;当你打电话给new
时,它会打印出来。
为了获得您期望的行为,您需要:
function Test(bornTime) {
this.age = function() {
var ageInMillis = new Date().getTime() - bornTime.getTime();
console.log("age:" + ageInMillis);
}
}
答案 1 :(得分:2)
当你执行var t=new Test(new Date());
并设置为0时,会计算ageInMillis。之后的任何调用都将返回0
你应该改变你的功能,如下所示,
function Test(bornTime) {
var ageInMillis; //=new Date().getTime()-bornTime.getTime();
this.age = function() {
ageInMillis = new Date().getTime() - bornTime.getTime();
console.log("age:" + ageInMillis);
}
}
var t = new Test(new Date());
t.age(); //output is zero
setTimeout(t.age, 1000); // it prints 0
jsFiddle here
答案 2 :(得分:1)
您将新的Date()传递给Test(),并将其设置为当前时间。然后从当前时间Date().getTime()-bornTime.getTime()
中减去它,因为经过的时间小于一毫秒,差值为0毫秒。
当你在一秒钟后第二次调用它时,变量没有改变。您需要在“动态方法”中重做减法(它实际上称为JavaScript中的匿名函数)
答案 3 :(得分:1)
创建对象时正在设置变量。它始终是相同的值。如果你想改变你应该使它成为一个功能。你的代码实际上正在工作,它只是你获得当前时间并从中减去当前时间。更改传入的日期。
var ageInMillis=function() {
Date().getTime()-bornTime.getTime()
};
答案 4 :(得分:1)
好吧,让我们来看看你在做什么。
var t=new Test(new Date());
好的,所以你现在正在创建一个bornTime
的新对象。
var ageInMillis=new Date().getTime()-bornTime.getTime();
现在 bornTime
,你现在正在减去它。从相同数字中减去的任何数字都是零,所以......我认为你的问题现在很明显;)