假设我有一个像这样的对象:
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/