JavaScript:我需要在特定范围内创建一个函数。 要创建的函数是由先前的代码生成过程动态生成的。并且此功能的定义范围也可能会发生变化。
看一下这个例子:
var createFnInOtherScope = function() {
console.debug('createFnInOtherScope: Who I am', this);
//This code can not be modified because it's dynamically generated
function MyFunction() {
console.debug('MyFunction');
}
}
var obInitial = {
createFn: function() {
console.debug('createFn: Who I am', this);
createFnInOtherScope.call(window);
}
}
obInitial.createFn();
//ReferenceError: MyFunction is not defined
window.MyFunction();
我怎么能这样做?
感谢。
答案 0 :(得分:3)
如果我理解正确的话,你所要求的是不可能的。
Javascript中的范围是一个词汇构造,意味着范围内的内容是由源文件中关于任何封闭函数的物理位置(在解析时)定义的。
一旦该范围(词汇上)被关闭,您就无法追溯性地将某些内容添加到范围中。
答案 1 :(得分:0)
函数范围在分析时定义。您可以创建一个函数并将其显示为window
属性:
function outer() {
function inner() {
console.log("hello world");
}
window.inner = inner;
}
window.inner(); // hello world
但这并没有改变“内在”功能的范围。它通过全局对象可见和可调用,但该功能在“外部”功能的范围内是不可改变的。
答案 2 :(得分:0)
只需在this
上下文中定义此功能:
var createFnInOtherScope = function() {
this.MyFunction = function() {
console.debug('MyFunction');
};
};