Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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-can';在运行时间间隔的函数中调用时,是否不使用对象方法?_Javascript_Object_Setinterval_Intervals - Fatal编程技术网

Javascript-can';在运行时间间隔的函数中调用时,是否不使用对象方法?

Javascript-can';在运行时间间隔的函数中调用时,是否不使用对象方法?,javascript,object,setinterval,intervals,Javascript,Object,Setinterval,Intervals,当我尝试执行以下操作时,我得到了未定义的函数(为了可读性而简化) 此代码在区间内执行时给出“undefined function This.bar()”,但在区间外调用This.foo时不会给出 我怎样才能做到这一点?这是正确的-你不能那样做。当从setInterval()调用此指针时,将无法正确设置该指针(它可能被设置为指向全局窗口对象)。您可以这样更改代码以解决此问题: function object() { this.bar = function() { }; this.foo

当我尝试执行以下操作时,我得到了未定义的函数(为了可读性而简化)

此代码在区间内执行时给出“undefined function This.bar()”,但在区间外调用This.foo时不会给出


我怎样才能做到这一点?

这是正确的-你不能那样做。当从
setInterval()
调用
指针时,将无法正确设置该指针(它可能被设置为指向全局
窗口
对象)。您可以这样更改代码以解决此问题:

function object() {
  this.bar = function() { };

  this.foo = function() {
    this.bar();
  };
  var self = this;   // save reference to local object in variable other than 'this'

  this.z = setInterval(function() {
    self.foo();      // call method on local object
  }, 1000);

}

+1使用“self”而不是我随处可见的可怕的“that”。@nnnnnn,self实际上是不好的,因为self指的是窗口对象@epascarello-我不认为这是一个问题,因为如果没有
窗口,我永远不会使用
window.self
部分,对于像jfriend00的
self
这样的代码,它总是一个局部变量,因此不会有冲突。但是你可以说
\u this
或者
thisObj
或者
me
或者其他什么;请不要使用
that
,因为这个词的意思与变量的用途相反。@在本例中,
self
是一个局部变量,因此它不同于
window。self
myObject。self
在myObject中的作用与
window.self
在window中的作用基本相同,我认为这是一件好事,而不是可以避免的事情。我也会毫不犹豫地给我的对象一个
名称
属性,即使有一个
窗口。名称
。我也不担心
窗口
长度
属性,即使数组也有。在
window
拥有的许许多多的属性和方法中,只有大约六种我会在没有
窗口的情况下使用。
前缀,它们是alert、confirm、setTimeout、clearTimeout、setInterval和clearInterval。
function object() {
  this.bar = function() { };

  this.foo = function() {
    this.bar();
  };
  var self = this;   // save reference to local object in variable other than 'this'

  this.z = setInterval(function() {
    self.foo();      // call method on local object
  }, 1000);

}