从JavaScript对象提取键并用作变量
PHP中有一个名为从JavaScript对象提取键并用作变量,javascript,arrays,object,extract,Javascript,Arrays,Object,Extract,PHP中有一个名为extract的方法,它正是我在这里想要做的。假设我有一个如下所示的对象: var data = { name: "Olly" age: 19 }; function myTestFunction() { var data = { name: "Olly", age: 19, }; for (var key in data) { this[key] = data[key]; }
extract
的方法,它正是我在这里想要做的。假设我有一个如下所示的对象:
var data = {
name: "Olly"
age: 19
};
function myTestFunction() {
var data = {
name: "Olly",
age: 19,
};
for (var key in data) {
this[key] = data[key];
}
alert(name +" is "+ age +"!");
}
myTestFunction();
我想运行一个类似extract(data)
的方法,这样我就可以通过使用name
和age
而不是data.name
和data.age
来访问该对象中的属性
我在谷歌上搜索了一下,什么也找不到。你可以用这样的方法:
var data = {
name: "Olly"
age: 19
};
function myTestFunction() {
var data = {
name: "Olly",
age: 19,
};
for (var key in data) {
this[key] = data[key];
}
alert(name +" is "+ age +"!");
}
myTestFunction();
(在这里试试:)
甚至可以使用window[key]=data[key]
将它们导出到全局名称空间。
在任何情况下,都要非常小心,因为破坏全局名称空间/重写其他内容/等的风险非常高
更新:通用extract()
下面是更通用的/多级/循环命名空间提取器:)
这似乎就像“with”语句一样
var data = {
name: "Olly",
age: 19,
};
with(data){
alert(name +" is "+ age +"!"); //"Olly is age 19!"
name = "Charlie";
age = 28;
alert(data.name +" is "+ data.age +"!"); //"Charlie is age 28!"
}
alert(data.name +" is "+ data.age +"!"); //"Charlie is age 28!"
你使用的是像Yahoo YUI或Google Closure这样的小型化程序或优化器吗?我想Javascript的
with
语句与PHP的extract
方法更为相似。也就是说,与
的结合并不常见,除非您真正理解它的工作原理,否则我不会使用它。看@KrisKrause不,我不是。为什么会这样问?更新为修复命名:它被称为extract()
,而不是export()
:)通过在函数中说这个[key]=data[key],您不是已经对全局对象进行了重击吗?还请注意,此
将在该函数的严格模式下未定义,因此将抛出一个errorYep,如果您是从全局命名空间中的函数运行该函数,则是正确的。。最好从一个对象实例方法运行,或者根本不用它;但既然他问了“如何做到这一点…”那么,+1,但在这样的背景下传递是老生常谈,不是吗?为什么不像以前那样保留this
,然后使用call
调用函数,并以这种方式指定this
值呢?它只会将变量添加到全局对象(窗口)中,使用with
is,MDN文档中列出了几个对立面。对不起,我知道这个评论有多老了,但我相信这些都是相关的评论。