Object Javascript:函数中对变量名的引用?
我试图在变量中获取对变量名的引用,如Object Javascript:函数中对变量名的引用?,object,window,this,setinterval,clearinterval,Object,Window,This,Setinterval,Clearinterval,我试图在变量中获取对变量名的引用,如 var foo = function(){ alert(this); } var bar = foo(); 它会提醒[对象窗口],而不是foo 我的主要原因是,在同一变量上使用两次setInterval会使第一个interval具有不可清除的未知id,因为在clearInterval中,只清除最后一个集合,而让第一个运行。所以我想做一些类似的事情: var call_interval = setInterval; setInterval = fun
var foo = function(){
alert(this);
}
var bar = foo();
它会提醒[对象窗口],而不是foo
我的主要原因是,在同一变量上使用两次setInterval会使第一个interval具有不可清除的未知id,因为在clearInterval中,只清除最后一个集合,而让第一个运行。所以我想做一些类似的事情:
var call_interval = setInterval;
setInterval = function(){
clearInterval(this.name???);
call_interval.apply(this,arguments);
}
。。。所有这些都是为了创建一个setInterval,用相同的变量清除任何现有的间隔,以防止不可清除的间隔。如标题所示,这应该回答您的问题,尽管@Raymond Chen指出,您的实际问题可能不同 根据,当从任何函数外部调用时,
此
引用全局对象(在浏览器Javascript中,这是窗口)
从函数内部调用时,如果该函数是对象的方法,此
将设置为对象
因此,在你的情况下:
var x = {
foo: function() {
alert(this);
}
};
var bar = x.foo();
但是,这仍然不能告诉您调用了哪个函数
要获取函数名,请为函数指定一个显式名称,然后使用参数.callee
而不是this
来解析名称
var foofunc = function foo() {
var name = arguments.callee.toString().match(/function ([^\(]+)/)[1]);
alert(name);
}
var bar = foofunc();
我不明白你想干什么。
setInterval
的参数是一个函数,而不是一个变量。传递给clearInterval
的是setinterval
返回的id,而不是名称。您可以将相同的函数传递给setInterval
两次,得到两个ID,您可以通过将ID传递给clearInterval
来取消这两个ID。如果您描述如何使用修改后的setInterval
函数,如果您再次使用相同的变量调用setInterval,如:var foo=setInterval(function(){alert(“foo”);},1000);foo=setInterval(函数(){alert(“bar”);},1000);clearInterval无法访问第一个间隔并继续运行。是的,因为您过度编写了变量。如果不想丢失旧值,请不要将其替换为新值。例如,您可以执行interval.push(setInterval(function(){alert(“foo”);},1000);interval.push(setInterval(function(){alert(“bar”);},1000)现在这两个ID在interval
数组中进行独立清除。或者,您可以使用setInterval
方法创建一个singleInterval
对象,在设置新的间隔之前自动清除旧的间隔。但是改变语言的工作方式并不是解决这个问题的方法m、 是的,这是一个聪明的方法。OP不需要函数名。OP需要setInterval
返回值分配给的变量名。这根本不可能。(即使可能,也不会有帮助,因为返回值可能已分配给局部变量。)[因此无法从全局对象访问],或者可能从未将其分配给变量!)