我正在尝试在变量中引用变量名称,例如
var foo = function(){
alert(this);
}
var bar = foo();
它警告[对象窗口]而不是foo。
我的主要原因是setInterval,当在同一个变量上使用两次时,第一个间隔有一个不可清除的未知id,因为在clearInterval中只清除最后一个并留下第一个一个人跑。所以我想做点什么:
var call_interval = setInterval;
setInterval = function(){
clearInterval(this.name???);
call_interval.apply(this,arguments);
}
...所有希望创建一个setInterval,用相同的变量清除任何现有的时间间隔,以防止不可清除的时间间隔。
答案 0 :(得分:0)
正如标题所说,这应该回答你的问题,尽管正如@Raymond Chen指出的那样,你的实际问题可能会有所不同。
Per the documentation,当从任何函数外部调用时,this
引用全局对象(在浏览器Javascript中,这是窗口)。
从函数内部调用时,如果该函数是对象的方法,则this
将设置为该对象。
所以在你的情况下:
var x = {
foo: function() {
alert(this);
}
};
var bar = x.foo();
但是,这仍然没有告诉你调用了哪个函数。
要获取函数的名称,请为您的函数指定一个显式名称,然后使用arguments.callee
代替this
来解析名称。
var foofunc = function foo() {
var name = arguments.callee.toString().match(/function ([^\(]+)/)[1]);
alert(name);
}
var bar = foofunc();