对象函数的 JavaScript 名称

标签 javascript

假设我有一个像这样的对象:

var myObject = {};

myObject.myFunction = function() {
    var name = <some expression>; // name should be myFunction
}

我可以获取匿名函数内部分配给匿名函数的对象属性的名称吗?

最佳答案

没有通用的方法可以做到这一点。如果您调用该函数使 this 引用该对象,则可以迭代该对象的属性并比较值:

myObject.myFunction = function() { 
    var name;
    var func = arguments.callee;
    for (var prop in this) {
        if (this[prop] === func) {
            name = prop;
            break;
        }
    }
};

请注意 arguments.callee 的用法已被弃用,取而代之的是命名函数表达式。也就是说,你应该这样做:

myObject.myFunction = function func() {  // <- named function expression
    var name;
    for (var prop in this) {
        if (this[prop] === func) {
            name = prop;
            break;
        }
    }
};

但是,我想知道为什么你需要这个。属性名称不应该对函数的内部工作产生影响,如果有的话,在我看来它的设计很糟糕。

关于对象函数的 JavaScript 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557957/

相关文章:

javascript - 单击事件阻止鼠标移开触发

c# - 以 json 格式而不是纯 html 从 aspx 页面获取响应

javascript - Grafana:想要将组织名称添加到主页仪表板中

java - 使用 jquery ajax 调用托管 bean 方法并在 jquery 中取回结果

javascript - 如何在Vue.js中导出命名实例,停止使用: var app = this

javascript - onRowClicked 用于 react 数据表

javascript - 如何使 Ext.js 4 网格插件有状态?

javascript - 为d3js的线条元素添加边框

javascript - Node.js:任何错误都会导致 Heroku 服务器崩溃

javascript - 将 POST 请求捕获到脚本中的局部变量