Javascript 对象中的函数
各位, 我有一个小测试脚本的问题 我有这个JS:Javascript 对象中的函数,javascript,function,object,Javascript,Function,Object,各位, 我有一个小测试脚本的问题 我有这个JS: var button = { lastClick: 0, nowTime: new Date().getTime(), go: function () { var diff = this.nowTime - this.lastClick; if (diff < 3000) alert('Too fast:' + diff / 1000); lastClick = t
var button = {
lastClick: 0,
nowTime: new Date().getTime(),
go: function () {
var diff = this.nowTime - this.lastClick;
if (diff < 3000) alert('Too fast:' + diff / 1000);
lastClick = this.nowTime;
}.bind(this)
};
var按钮={
最后单击:0,
nowTime:new Date().getTime(),
go:函数(){
var diff=this.nowTime-this.lastClick;
如果(差值<3000)警报('太快:'+差值/1000);
lastClick=this.nowTime;
}.绑定(此)
};
这个HTML:
<input type="button" value="Go" onClick="button.go();" />
go
-函数应使用我的按钮
-对象中的nowTime
和lastClick
值,但它们未定义。有人能帮我吗
这是因为当您进行绑定时,
此
未定义(因此您要绑定到窗口
)
您可以这样做:
var button = {
lastClick: 0,
nowTime: new Date().getTime()
};
button.go = function () {
var diff = this.nowTime - this.lastClick;
if (diff < 3000) alert('Too fast:' + diff / 1000);
this.lastClick = this.nowTime;
}.bind(button);
一个不同之处(这可能对您有好处,也可能没有好处)是按钮的内部状态在这个版本中是隐藏的(字段通常被称为“private”)
如果希望nowTime始终为当前时间,请不要存储它:
var button = (function(){
var lastClick = 0;
return {
go: function () {
var nowTime = new Date().getTime();
var diff = nowTime - lastClick;
if (diff < 3000) alert('Too fast:' + diff / 1000);
lastClick = nowTime;
}
}
})();
var按钮=(函数(){
var lastClick=0;
返回{
go:函数(){
var nowTime=new Date().getTime();
var diff=nowTime-lastClick;
如果(差值<3000)警报('太快:'+差值/1000);
lastClick=nowTime;
}
}
})();
这是因为当您进行绑定时,此
未定义(因此您要绑定到窗口
)
您可以这样做:
var button = {
lastClick: 0,
nowTime: new Date().getTime()
};
button.go = function () {
var diff = this.nowTime - this.lastClick;
if (diff < 3000) alert('Too fast:' + diff / 1000);
this.lastClick = this.nowTime;
}.bind(button);
一个不同之处(这可能对您有好处,也可能没有好处)是按钮的内部状态在这个版本中是隐藏的(字段通常被称为“private”)
如果希望nowTime始终为当前时间,请不要存储它:
var button = (function(){
var lastClick = 0;
return {
go: function () {
var nowTime = new Date().getTime();
var diff = nowTime - lastClick;
if (diff < 3000) alert('Too fast:' + diff / 1000);
lastClick = nowTime;
}
}
})();
var按钮=(函数(){
var lastClick=0;
返回{
go:函数(){
var nowTime=new Date().getTime();
var diff=nowTime-lastClick;
如果(差值<3000)警报('太快:'+差值/1000);
lastClick=nowTime;
}
}
})();
没有必要将按钮
和按钮的定义分开。去吧
,是吗?此外,bind
在这里也不是必需的。我想知道alexP是不是在用this
指其他东西,因为如果你想这样做,bind
@MaxArt-bind的参数是必要的,例如setTimeout(button.go,100)
。似乎可以工作,但现在每次单击时,lastClick
等于nowTime
。但是nowTime
应该使用getTime()
@alexP您希望nowTime始终是新日期().getTime()?那么为什么要存储它呢?好问题@dystroy:-)我会使用你最后的建议。非常感谢。没有必要将按钮
和按钮的定义分开。开始
,是吗?此外,bind
在这里也不是必需的。我想知道alexP是不是在用this
指其他东西,因为如果你想这样做,bind
@MaxArt-bind的参数是必要的,例如setTimeout(button.go,100)
。似乎可以工作,但现在每次单击时,lastClick
等于nowTime
。但是nowTime
应该使用getTime()
@alexP您希望nowTime始终是新日期().getTime()?那么为什么要存储它呢?好问题@dystroy:-)我会使用你最后的建议。谢谢。