考虑以下代码:
(function() {
var a = 5;
var someFunc = function() { ... };
function anotherFunc() {
...
};
})();
window.myGlobalObj = {
init: function() {
// and somehow here I want to access to the IIFE context
}
};
我想在我的全局对象中拥有 IIFE 的执行上下文。我确实可以访问函数表达式和对象本身,因此我可以传递或修改某些内容以使其工作(不,我无法重写对象或函数内的所有内容)。
有可能吗?
我看到这是如何可行的唯一方法是使用eval
模拟动态范围。这样做(注意 IIFE 必须放在全局对象之后):
window.myGlobalObj = {
init: function() {
// and somehow here I want to access to the IIFE context
}
};
(function() {
var a = 5;
var someFunc = function() { ... };
function anotherFunc() {
...
};
eval("(" + String(window.myGlobalObj.init) + ")").call(window.myGlobalObj);
})();
以下是有关如何使用动态作用域的参考:是否可以在 JavaScript 中实现动态作用域而无需求助于 eval? https://stackoverflow.com/q/10060857/783743
Edit:我提供了一个示例来演示在 JavaScript 中使用动态作用域的强大功能。你可以玩fiddle http://jsfiddle.net/knBjT/ too.
var o = {
init: function () {
alert(a + b === this.x); // alerts true
},
x: 5
};
(function () {
var a = 2;
var b = 3;
eval("(" + String(o.init) + ")").call(o);
}());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)