Javascript:这个函数里面的变量名称引用?

时间:2014-10-26 04:21:33

标签: object window this setinterval clearinterval

我正在尝试在变量中引用变量名称,例如

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,用相同的变量清除任何现有的时间间隔,以防止不可清除的时间间隔。

1 个答案:

答案 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();