Javascript来电者功能的父母

时间:2016-07-21 15:34:41

标签: javascript arrays function object methods

我在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只返回函数的名称,这还不够。我需要调用函数的完整树的位置。

这感觉就像一个复杂的问题,所以感谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

好吧,你似乎试图在子对象中找出父对象的引用。这是不可能的。看看这篇文章Javascript Object get parent

答案 1 :(得分:0)

我认为您可以使用new Error().stack来分析来电的来源。

希望你知道任何预处理器/ uglyfier / bundler都有可能破坏你的方法......