我想识别调用函数和一个函数调用它 以下示例说明了此问题
<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>
你有解决方案吗? 非常感谢!
答案 0 :(得分:0)
不考虑arguments.callee
和Function.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?