为了解决已被证明对我来说是范围限制的问题(如在此处回答),我编写了一段代码,该代码在匿名函数中插入了一行,这样编写函数的人就不必自己动手了。这有点hacky(实际上,感觉很hacky),我真的不知道我在做什么,所以我很感激专家的眼睛来发现我可能错过的任何错误或指出我的任何危险我不知道。这是代码:
function myObj(testFunc) {
this.testFunc = testFunc;
this.Foo = function Foo(test) {
this.test = test;
this.saySomething = function(text) {
alert(text);
};
};
var Foo = this.Foo;
var funcSep = this.testFunc.toString().split("{");
funcSep.splice(0, 1);
funcSep = funcSep.join("{");
var compFunc = " var Foo = this.Foo;" + funcSep;
compFunc = compFunc.split("}");
compFunc.splice(compFunc.length - 1, 1);
compFunc.join("}");
var otherTestFunc = new Function(compFunc);
otherTestFunc.apply(this);
}
var test = new myObj(function() {
var test = new Foo();
test.saySomething("Hello world");
});
上面的函数按预期计算,我不需要强制编写匿名函数Foo
的人使用this.Foo
. 不过,这种方法感觉很可疑。我正在做的事情是否可以接受,如果没有,有什么方法可以规避它吗?
此外,我没有在原始问题中包含此内容的唯一原因是,这似乎与问题的原始上下文有所不同。