JavaScript函数是否可以知道自己的名称,包括它所包含的对象
我需要许多JavaScript函数来知道它们自己的名称,包括它们所包含的对象。我似乎找不到办法来做这件事。上面所有的例子都不太适合我的用例。下面是我要找的一把小提琴:JavaScript函数是否可以知道自己的名称,包括它所包含的对象,javascript,Javascript,我需要许多JavaScript函数来知道它们自己的名称,包括它们所包含的对象。我似乎找不到办法来做这件事。上面所有的例子都不太适合我的用例。下面是我要找的一把小提琴: 我希望能够创建一个返回myMainNameSpace.a.b或myMainNameSpace.a.b()的函数,这样我就可以将它放在一些函数中。这可能吗?谢谢 不用eval就可以完成,只需迭代每个字母,直到到达aimSign。在每次迭代中,在最后一个嵌套对象中放置一个新对象: function callObjTail(obj){
我希望能够创建一个返回
myMainNameSpace.a.b
或myMainNameSpace.a.b()
的函数,这样我就可以将它放在一些函数中。这可能吗?谢谢 不用eval就可以完成,只需迭代每个字母,直到到达aimSign。在每次迭代中,在最后一个嵌套对象中放置一个新对象:
function callObjTail(obj){
var lastObj;
var lastSign;
for(var i='a'.charCodeAt(); true; i++){
console.log(i);
if(obj[String.fromCharCode(i)]){
lastObj = obj;
lastSign = i;
obj = obj[String.fromCharCode(i)];
}
else{
break;
}
}
if(lastObj){
lastObj[String.fromCharCode(lastSign)]();
}
else{
obj[Object.keys(obj)[0]]();
}
}
function buildObj(aimSign){
var obj = {};
var head = obj;
var nests = '';
for(var i='a'.charCodeAt(); i < aimSign.charCodeAt(); i++){
obj[String.fromCharCode(i)] = {};
obj = obj[String.fromCharCode(i)];
}
return { head : head, tail: obj };
}
var obj = buildObj('e');
console.log(obj.head); // { a: { b: { c: { d: {}}}}
console.log(obj);
obj.tail.e = function(){ console.log('tail called');};
console.log(obj.head.a.b.c.d.e());
console.log(obj.tail.e());
// call tail at the end
callObjTail(obj.head);
callObjTail(obj.tail);
函数callObjTail(obj){
var lastObj;
var-lastSign;
对于(var i='a'.charCodeAt();true;i++){
控制台日志(i);
if(obj[String.fromCharCode(i)]){
lastObj=obj;
lastSign=i;
obj=obj[String.fromCharCode(i)];
}
否则{
打破
}
}
if(lastObj){
lastObj[String.fromCharCode(lastSign)]();
}
否则{
obj[Object.keys(obj)[0]]();
}
}
函数buildObj(aimSign){
var obj={};
var头=obj;
var-nests='';
对于(var i='a'.charCodeAt();i
你的意思是?你所问的是一种反思。简短的回答是“不”。较长的回答是“是的,但你不想那样做。”Eval
是邪恶的,等等。缩小/模糊会破坏它,等等。@Blazemonger函数。name
不是到处都支持的,并且不能用于像b:function(args)这样的匿名函数{
如果函数包含在多个对象中会发生什么?这也是你无法知道对象的“名称”的原因。你可以像定义的那样迭代全局变量,找到一个有你的方法的对象,但不知道它是对象……我不知道是哪个“它”(不需要eval就可以完成)这个答案是指。你的buildObj
在做什么?OP在哪里谈论字母和aimsigns?你是对的,我在我的答案中加入了一些其他函数。嗯,我仍然不知道这些charcode迭代与OP的问题有什么关系?如果它们仅用于示例,它们应该不那么突出。你是对的。实际上,我的注意力集中在最后的问题请求上,不需要打电话给eval。
function callObjTail(obj){
var lastObj;
var lastSign;
for(var i='a'.charCodeAt(); true; i++){
console.log(i);
if(obj[String.fromCharCode(i)]){
lastObj = obj;
lastSign = i;
obj = obj[String.fromCharCode(i)];
}
else{
break;
}
}
if(lastObj){
lastObj[String.fromCharCode(lastSign)]();
}
else{
obj[Object.keys(obj)[0]]();
}
}
function buildObj(aimSign){
var obj = {};
var head = obj;
var nests = '';
for(var i='a'.charCodeAt(); i < aimSign.charCodeAt(); i++){
obj[String.fromCharCode(i)] = {};
obj = obj[String.fromCharCode(i)];
}
return { head : head, tail: obj };
}
var obj = buildObj('e');
console.log(obj.head); // { a: { b: { c: { d: {}}}}
console.log(obj);
obj.tail.e = function(){ console.log('tail called');};
console.log(obj.head.a.b.c.d.e());
console.log(obj.tail.e());
// call tail at the end
callObjTail(obj.head);
callObjTail(obj.tail);