对象函数的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=''代码>。但我认为是函数名,而不是该函数的引用名。