检测来电并调用它

时间:2015-09-08 12:49:31

标签: javascript

我想识别调用函数和一个函数调用它 以下示例说明了此问题

<script>
    var func = (function () {
        var check = function (value) {
            //detect caller function
            var that = arguments.callee.caller;

            //I want
            //if Buttom One click --> call print in func1 
            //if Buttom Two click --> call print in func2
        };

        return {
            check:check
        }
    })();

    var func1 = (function () {
        var start = function () {
            func.check(10);
        };
        var print = function (value) {
            alert(value);
        }

        return {
            start: start,
            print: print
        }
    })();

    var func2 ...
</script>
<button id="One" onclick="func1.start()">One</button>
<button id="Two" onclick="func2.start()">Two</button>

你有解决方案吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

不考虑arguments.calleeFunction.caller都是非标准的事实,它之所以不起作用的原因是你将属性与局部变量混淆,所有这些都混入了闭包。

var func1 = (function () {
    // ...
})();

这会创建一个函数,运行它并将结果保存在func1中。由于闭包的return语句为return { start: start },因此在此部分代码func1的末尾将包含一个对象,该对象称为start

当您使用var时,您只需创建一个存在于该函数内的变量。在功能之外,它不再可访问。您确实在返回的对象中存储了start函数,但您从未返回print,因此它不再存在。

我不是一行一行地试图解释所有错误,而是问你:你究竟想做什么?不要向我们询问您尝试过的解决方案,但这些解决方案并不起作用,而是关于代码应该做什么。

如果您需要关于闭包和范围的进一步解释,我建议您查看我写的这些答案。

Understanding public/private instance variables

Do the different methods of creating classes in Javascript have names and what are they?