在javascript中使用原型时设置函数名称(用于记录)

阿克瑟·朗格卡(Akshay Rangnekar)

我正在使用原型在javascript中定义对象。

例如

Listerly.prototype.init = function() {

    this.storage = new ListerlyStorage();
    this.mainView = new ListerlyMainView();
} 

一切正常,但我也尝试使用以下非常简单的日志记录方法来限制控制台日志记录:

Listerly.prototype.log = function(message) {
    if (this.loggingEnabled) {
        if (arguments && arguments.callee && arguments.callee.caller) {
            var methodName = arguments.callee.caller.name;
            console.log("Method name: "+ methodName);
            if (this.logMethods["*"] || this.logMethods[methodName]) {
                if (methodName) console.log(methodName + ":" + message);
                else console.log(message);
            }
        } else {
            console.log(message);
        }
    }
};

问题在于使用原型定义的函数没有函数名称,因此arguments.callee.caller.name为空白。

有什么干净的方法可以设置函数名称?完成并.name在每个函数上设置字段后,我尝试遍历原型,但这似乎不起作用。

有一个丑陋的解决方法,这样做会污染全局名称空间:

function listerly_finishedLoadingUser(user) {
    this.user = user;
    this.mainView.setUser(user);
}
Listerly.prototype.finishedLoadingUser = listerly_finishedLoadingUser;

希望有一种更清洁的方法吗?

尖耳朵

函数名称/标识符在函数表达式中是可选的

Listerly.prototype.finishedLoadingUser =
  function listerly_prototype_finishedLoadingUser (user) {
    // …
  };

您可以在函数内使用函数名进行严格模式下的递归,其中arguments.callee严禁使用

请注意,在较旧的(损坏的)JScript版本中,标识符也可以在函数外部使用,因此请明智地选择它。标识符长度也可能有(未指定)限制。

name您使用的(只读)属性目前仅是事实上的标准在不可用的地方,您可以从函数序列化中获得函数名称,即将Function实例转换为字符串并提取标识符部分(就像我在JSX:object.js中所做的那样):

/**
 * Returns the name of a function
 *
 * @param {Function|String} aFunction
 * @return {string}
 *   The name of a function if it has one; the empty string otherwise.
 */
getFunctionName: function (aFunction) {
  /* Return the empty string for null or undefined */
  return (aFunction != null
           && typeof aFunction.name != "undefined" && aFunction.name)
    || (String(aFunction).match(/^\s*function\s+([A-Za-z_]\w*)/) || [, ""])[1];
},

通常,功能序列化是不可靠的。

还要注意,对象和实例caller属性是专有的。argumentsFunction

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在javascript函数名称中使用coldfusion变量

来自分类Dev

使用JavaScript在运行时设置函数名称

来自分类Dev

在Swift中使用函数参数名称

来自分类Dev

在C中使用标准函数名称

来自分类Dev

在C中使用标准函数名称

来自分类Dev

在JavaScript中,通过“ new Function()”创建函数时如何设置函数参数名称?

来自分类Dev

在C ++中使用所有默认参数调用函数时使用参数名称

来自分类Dev

在C ++中使用所有默认参数调用函数时,请使用参数名称

来自分类Dev

使用ggplot软件包时,如何在R中使用函数名称的字符串调用函数?

来自分类Dev

如何在ghci中使用数学符号(函数名称)?

来自分类Dev

无法在Laravel中使用某个单词作为函数名称

来自分类Dev

如何在MATLAB中使用动态函数名称?

来自分类Dev

声明方法时,JavaScript复制函数名称

来自分类Dev

获取Javascript函数名称

来自分类Dev

搜索函数名称(Javascript)

来自分类Dev

在函数原型中使用_.extend

来自分类Dev

JavaScript函数名称中应避免使用数字吗?

来自分类Dev

Javascript:使用变量作为构造函数名称

来自分类Dev

在javaScript中声明函数时使用的原型是什么

来自分类Dev

定义函数名称后设置

来自分类Dev

定义函数名称后设置

来自分类Dev

在PHP中使用函数名称作为无关类的名称可以吗?

来自分类Dev

在Sass中使用函数将返回包含函数名称而不是结果的字符串

来自分类Dev

在Sass中使用函数将返回包含函数名称而不是结果的字符串

来自分类Dev

调用函数时声明参数名称

来自分类Dev

调用函数名称时如何获取?

来自分类Dev

破解我的代码-如何在JavaScript中的另一个函数中使用函数名称作为参数

来自分类Dev

破解我的代码-如何在JavaScript中的另一个函数中使用函数名称作为参数

来自分类Dev

在函数中使用记录

Related 相关文章

  1. 1

    在javascript函数名称中使用coldfusion变量

  2. 2

    使用JavaScript在运行时设置函数名称

  3. 3

    在Swift中使用函数参数名称

  4. 4

    在C中使用标准函数名称

  5. 5

    在C中使用标准函数名称

  6. 6

    在JavaScript中,通过“ new Function()”创建函数时如何设置函数参数名称?

  7. 7

    在C ++中使用所有默认参数调用函数时使用参数名称

  8. 8

    在C ++中使用所有默认参数调用函数时,请使用参数名称

  9. 9

    使用ggplot软件包时,如何在R中使用函数名称的字符串调用函数?

  10. 10

    如何在ghci中使用数学符号(函数名称)?

  11. 11

    无法在Laravel中使用某个单词作为函数名称

  12. 12

    如何在MATLAB中使用动态函数名称?

  13. 13

    声明方法时,JavaScript复制函数名称

  14. 14

    获取Javascript函数名称

  15. 15

    搜索函数名称(Javascript)

  16. 16

    在函数原型中使用_.extend

  17. 17

    JavaScript函数名称中应避免使用数字吗?

  18. 18

    Javascript:使用变量作为构造函数名称

  19. 19

    在javaScript中声明函数时使用的原型是什么

  20. 20

    定义函数名称后设置

  21. 21

    定义函数名称后设置

  22. 22

    在PHP中使用函数名称作为无关类的名称可以吗?

  23. 23

    在Sass中使用函数将返回包含函数名称而不是结果的字符串

  24. 24

    在Sass中使用函数将返回包含函数名称而不是结果的字符串

  25. 25

    调用函数时声明参数名称

  26. 26

    调用函数名称时如何获取?

  27. 27

    破解我的代码-如何在JavaScript中的另一个函数中使用函数名称作为参数

  28. 28

    破解我的代码-如何在JavaScript中的另一个函数中使用函数名称作为参数

  29. 29

    在函数中使用记录

热门标签

归档