【发布时间】:2013-10-01 22:46:13
【问题描述】:
我正在阅读 JavaScript 语言的教科书。在研究闭包主题时,我提出了以下问题。
考虑这个功能:
function foo() {
extractPropsToCurrentContext({'prop1' : 'hello', 'prop2' : 123});
}
我想要上面代码的结果,等于:
function foo() {
var prop1 = 'hello';
var prop2 = 123;
}
所以,我的问题是,如何实现函数 extractPropsToCurrentContext(/* Object */) ?
澄清一下,我想将对象的这些属性提取到执行上下文中,而不是在“this”指针下。 (因此,那些提取的道具应该在该函数中私有)。
要澄清的另一件事是,您不能假设 foo 将使用 'new' 调用。 (如新的 foo())
更新:
我的意思是,我们有没有可能使用任何hacky技巧来绕过浏览器的限制,以更接近我们想要的结果?比如,几年前,我们发明了 JSONP 用于跨域、长拉用于消息推送等?
【问题讨论】:
-
你有任何理由怀疑它实际上是可能的吗?有时我也想要同样的东西。但我不认为它可以做到。
-
我还不知道。所以,这就是我在这里问这个问题的原因。也许有人对这个有趣的问题有任何想法。 @ScottSauyet
-
JavaScript 不会将lexical environments 暴露给您的代码(在某些情况下超出global environment,例如浏览器中的
window和Node.js 中的global)。因此,如果不构造声明语句和eval()'在它的目标范围内将它的引用传递给另一个函数以进行修改甚至创建局部变量,这是不可能的。 -
但是我们有没有可能使用任何 hacky 技巧来绕过限制,以接近结果?比如,jsonp 用于跨域,长拉用于消息推送? @JonathanLonowski
-
不确定它是否能回答您的问题,但您可以在所有函数中声明一个本地对象 var CurrentContext={},然后将所有属性附加到该对象。
标签: javascript