我在JavaScript中有函数需要检查运行它的函数是否确实是正确的函数(例如,需要函数something.stuff.morestuff.coolFunction
来调用它或者它不会运行)。
我尝试过Function.caller
,但这只会返回函数本身,而无法确定它所在的对象。
给出以下设置:
function helloWorld(){
if(/* the exact path to the calling function */ === 'greetings.happy.classic.sayhello'){
console.log('Hello World');
}else{
console.log(/* the path from earlier */ + ' not allowed.');
}
}
greetings = {
happy: {
classic: {
sayHello: function(){ helloWorld(); }
sayBye: function(){ helloWorld(); }
}
},
angry: {
sayHello: function(){ helloWorld(); }
},
simple: [
function(){ helloWorld(); }
]
}
function sayWords(){
helloWorld();
}
我想要完成的事情看起来像这样:
greetings.happy.classic.sayHello(); // => Hello World!
greetings.happy.classic.sayBye(); // => greetings.happy.classic.sayBye not allowed.
greetings.angry.sayHello(); // => greetings.angry.sayHello not allowed.
greetings.simple[0](); // => greetings.simple[0] not allowed.
sayWords(); // => sayWords not allowed.
helloWorld(); // => null not allowed.
// not sure what would come out of this, so i put null on that one
这是一个整齐的小包装中的问题:
如何找到调用函数的确切对象路径(即
greeting.happy.classic.sayHello
)?Function.caller.name
只返回函数的名称,这还不够。我需要调用函数的完整树的位置。
这感觉就像一个复杂的问题,所以感谢大家的帮助。
答案 0 :(得分:0)
好吧,你似乎试图在子对象中找出父对象的引用。这是不可能的。看看这篇文章Javascript Object get parent
答案 1 :(得分:0)
我认为您可以使用new Error().stack
来分析来电的来源。
希望你知道任何预处理器/ uglyfier / bundler都有可能破坏你的方法......