动态生成的方法
dynamically generated methods
在Pro javascript Technique book
中找到这个例子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.t age打印1000,我做错了什么吗?
不重新计算ageInMillis
;当你调用new
时,它将输出它是什么。
为了得到你期望的行为,你需要这个:
function Test(bornTime) {
this.age = function() {
var ageInMillis = new Date().getTime() - bornTime.getTime();
console.log("age:" + ageInMillis);
}
}
当您执行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
创建对象时正在设置变量。它在所有时间内都是相同的值。如果你想改变它,你应该把它变成一个函数。你的代码实际上是工作的,只是你得到了当前时间,并从中减去了当前时间。更改传入的日期
var ageInMillis=function() {
Date().getTime()-bornTime.getTime()
};
好吧,让我们看看你在做什么。
var t=new Test(new Date());
好的,现在你正在创建一个新的对象,bornTime
是。
var ageInMillis=new Date().getTime()-bornTime.getTime();
bornTime
是现在,你从现在减去它。任何数减去相同的数都是零,所以…我想你的问题现在很明显了
您正在传递一个新的Date()给Test(),它被设置为当前时间。然后从当前时间Date().getTime()-bornTime.getTime()
中减去它,因为经过的时间少于一毫秒,差值为0毫秒。
当您在一秒钟后第二次调用它时,变量没有改变。您需要在"动态方法"(它实际上在JavaScript中称为匿名函数)中重做减法
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 离子滑块 - 有一种方法可以动态更改间隔
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- jQuery .change() 方法不适用于动态创建的复选框
- 在我的上下文中添加对象的动态方法
- 如何用document.createElement(“input”)方法使输入文本字段动态扩展
- 有没有一种方法可以创建一个对象并同时为其指定一个动态特性
- 按方法动态更改元素数据
- jsTree-使用AJAX/C#Web方法动态填充树
- 为对象中的所有方法动态地准备一个参数
- 使用getjson方法动态地从json中获取数据并循环这些值
- 如何在ajax中使用jquery get方法动态修改html
- 数据表使用fnAddData或类似的方法动态添加行,并向特定列添加类