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