Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象中的函数_Javascript_Function_Object - Fatal编程技术网

Javascript 对象中的函数

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

各位, 我有一个小测试脚本的问题

我有这个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 = 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:-)我会使用你最后的建议。谢谢。