【问题标题】:is it possible to dynamically create a function that has an ID in javascript是否可以在javascript中动态创建具有ID的函数
【发布时间】:2012-07-15 07:01:44
【问题描述】:

我可以使用以下方法在 javascript 中动态创建函数:

var MyClass = new Function("console.log('Hello World!');");

但是当我这样做时,ID 将设置为“匿名”。 我真的很想给这样一个函数一个 ID 用于调试目的;这就是您在控制台记录此类函数(类)的实例时显示的 id。 有没有办法做到这一点?

【问题讨论】:

    标签: javascript function dynamic anonymous


    【解决方案1】:

    您可以通过像这样创建create 函数来做到这一点:

    var create = (function() { 
        var id = 0;
    
        return function(f) {
            return eval('(function id' + (id++) + (f + '').substr(8) + ')' );
        };
    })();
    
    var a = create(function() { alert(0); });
    var b = create(function() { alert(1); });
    
    alert(a); // function id0() { alert(0); }
    alert(b); // function id1() { alert(1); }
    a();      // 0
    b();      // 1
    

    DEMO

    【讨论】:

    • 这实际上可能很有用。我需要克服 eval=evil 的感觉,但在这种情况下,它可能是有道理的。 (这些类无论如何都没有构造函数实现)。
    • “eval is evil”,但不要忘记“new Function is evil”,所以我认为你可以接受。
    【解决方案2】:

    简短回答:不。

    更长的答案:不可能,甚至不能设置function.name。老实说,我什至不明白这一点,因为Function 构造函数是用于动态创建的临时、动态函数。所以把它们放在 viariables 上,你就完成了。

    如果您希望它们有一个名称,因为您正在创建一个类,请使用语法

    function MyClass(...) {
    

    请注意,无论如何,一些开发人员工具(如 Chrome 网络检查器)对此非常聪明,即使您这样定义它也会显示 MyClass

    var MyClass = function() {...
    

    【讨论】:

    • 问题是类名在设计时是未知的,所以我不能使用你提到的语法。我知道您可能不会从您的角度看到这一点,但我们正在元级别上进行编程,因此我们有一个使用了数百次的类。当您在控制台中记录它时,您必须更彻底地检查它以了解它的类型(在元级别上)。这不方便。
    猜你喜欢
    • 2023-03-14
    • 2012-06-16
    • 2015-12-22
    • 2021-12-08
    • 2013-06-03
    • 2021-10-27
    • 1970-01-01
    • 2010-10-02
    • 2020-12-26
    相关资源
    最近更新 更多