javascript - 如何访问被调用函数的当前元素属性名

标签 javascript wrapper object-properties

出于记录目的,我为元素函数属性创建了一个包装函数。 包装函数在上面:

functionsWrapper: function () {
    for (i = 0, args = new Array(arguments.length); i < arguments.length; i++) {
        args[i] = arguments[i];
    }

    console.log('call for ' + arguments.callee.name + ' with params ' + argumantsLog(args));

    return this['original' + arguments.callee.name].apply(this, args);
}

然后我使用这段代码来包装元素函数:

logFunctionsCalls: function (element) {
    if (!element)
        return;

    if (element.children && element.children.length)
        for (var i = 0; i < element.children.length; i++)
            logFunctionsCalls(element.children[i]);

    if (!element.functionsLogged) {
        element.functionsLogged = true;

        for (var property in element) {
            if (typeof element[property] != 'function')
                continue;

            element['original' + property] = element[property];
            element[property] = functionsWrapper;
        }
    }
}

我的问题是 arguments.callee 包含 functionsWrapper 代码,但没有被调用函数的属性名称。

最佳答案

您不能在任何地方都使用相同的 functionWrapper - 没有办法找出调用的是哪个属性。相反,创建不同的包装器并将原始包装器保持关闭。

for (var p in element) (function(property) {
    if (typeof element[property] != 'function')
        return;

    var original = element[property];
    element[property] = function wrapped() {
        console.log('call for ' + property + ' with params ' + Array.prototype.join.call(arguments));
        return original.apply(this, arguments);
    };
}(p));

关于javascript - 如何访问被调用函数的当前元素属性名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264210/

相关文章:

javascript - 如何在单击该图像的onclick事件时获取图像源路径

php - 有人使用过这个 Highrise API PHP Wrapper 库吗?我需要帮助验证

java - 有没有办法在 Eclipse 中自动生成包装器?

if-statement - 访问 typescript 联合类型中的不同属性

列出耶拿实例的对象属性

javascript删除少于3个字符的单词

javascript - CategoryFilter 作为列选择器

javascript - 转换 Observable 中的数据

c# - 如何从源代码为 QuickFix 生成 c# 包装器?

javascript - 为什么这个对象属性未定义?