对象函数的javascript名称

对象函数的javascript名称,javascript,Javascript,假设我有这样一个对象: var myObject = {}; myObject.myFunction = function() { var name = <some expression>; // name should be myFunction } var myObject={}; myObject.myFunction=函数(){ var name=;//名称应为myFunction } 我可以在匿名函数中获取分配了匿名函数的对象属性的名称吗?没有通用的方法。如果

假设我有这样一个对象:

var myObject = {};

myObject.myFunction = function() {
    var name = <some expression>; // name should be myFunction
}
var myObject={};
myObject.myFunction=函数(){
var name=;//名称应为myFunction
}

我可以在匿名函数中获取分配了匿名函数的对象属性的名称吗?

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

myObject.myFunction = function() { 
    var name;
    var func = arguments.callee;
    for (var prop in this) {
        if (this[prop] === func) {
            name = prop;
            break;
        }
    }
};
请注意,不赞成使用命名函数表达式,而赞成使用命名函数表达式。也就是说,你应该做:

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

myObject.myFunction=function func(){/@Felix Kling的解决方案非常棒,但这取决于命名的函数表达式。正如他所说,如果您需要知道匿名函数所分配的属性的名称,那么您的代码设计是糟糕的。不过,如果您想编写糟糕的代码,请改为这样编写:

function anonymous(method) {
    return function () {
        var args = Array.prototype.slice.call(arguments), name = "";

        for (var key in this) {
            if (this[key] === method) {
                name = key;
                break;
            }
        }

        return method.apply(this, args.concat(name));
    };
}
现在,您可以创建如下匿名函数:

var myObject = {};

myObject.myFunction = anonymous(function (name) {
    // function body
});

请记住,
name
必须是函数的最后一个参数。

什么?我不知道这意味着什么……该函数是匿名的。它不是真正匿名的,因为您将它分配给了对象上的属性。不,您不能这样做。@JimRubenstein:它是匿名的,函数本身没有名称。
myObject.myFunction.name=''。但我认为是函数名,而不是该函数的引用名。