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
返回值分配给的变量名。这根本不可能。(即使可能,也不会有帮助,因为返回值可能已分配给局部变量。)[因此无法从全局对象访问],或者可能从未将其分配给变量!)