首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替代arguments.callee

替代arguments.callee
EN

Stack Overflow用户
提问于 2013-10-06 23:05:00
回答 2查看 10.6K关注 0票数 9

我有一个侦听整个文档并记录击键的EventListener,但是当满足某些条件时,我想删除这个侦听器。

下面是我的代码片段:

代码语言:javascript
复制
document.addEventListener('keyup', function(e) {
    var letter_entered = String.fromCharCode(e.keyCode).toLowerCase();
    player.makeGuess(letter_entered);

    if(player.win_status === true || player.lose_status === true) {
        document.removeEventListener('keyup', arguments.callee, false);
    }
});

这是可行的,但是根据Mozilla开发人员文档,这个方法已经被废弃了。

我知道我可以简单地命名这个函数,但是有一个替代方案可以让我继续使用未命名的函数

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 07:33:13

使用以下过程:

  • 创建一个变量
  • 将匿名函数分配给变量
  • 使用变量引用调用它
  • 匿名函数使用变量名称引用自身。

以下列方式使用:

代码语言:javascript
复制
   var foo = function(e)
    {
    "use strict";
    console.log(e);
    document.removeEventListener('keyup', foo, false);
    }

document.addEventListener('keyup', foo);

您可以使用y组合器轻松地解决这个问题:

代码语言:javascript
复制
function y(f) {
    return function () {
        return f.bind(null, y(f)).apply(this, arguments);
    };
}

现在您可以重写代码如下:

代码语言:javascript
复制
document.addEventListener("keyup", y(function (callee, e) {
    player.makeGuess(String.fromCharCode(e.keyCode).toLowerCase());
    if (player.win_status || player.lose_status) document
        .removeEventListener("keyup", callee);
}));

都是这样的人。

票数 14
EN

Stack Overflow用户

发布于 2013-12-02 19:15:39

使用另一个匿名函数作为包装器,将命名函数(callee )存储到原始函数中:

代码语言:javascript
复制
document.addEventListener('keyup', (function(e)
  {
  var aFunction = function()
    {
    var letter_entered = String.fromCharCode(e.keyCode).toLowerCase();
    player.makeGuess(letter_entered);
    };

  if(player.win_status === true || player.lose_status === true) 
    {
    document.removeEventListener('keyup', window, false);
    }
  else
    {
    aFunction();
    }
  }
), false);

参考资料

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19214977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档