PHP中有一个名为extract
的方法,它完全符合我的要求。假设我有一个看起来像这样的对象:
var data = {
name: "Olly"
age: 19
};
我想运行像extract(data)
这样的方法,以便我可以通过使用name
和age
而不是data.name
和{来访问该对象中的属性{1}}。
我做了一些谷歌搜索,找不到任何东西。
答案 0 :(得分:8)
您可以使用以下内容:
function myTestFunction() {
var data = {
name: "Olly",
age: 19,
};
for (var key in data) {
this[key] = data[key];
}
alert(name +" is "+ age +"!");
}
myTestFunction();
(试试这里:http://jsfiddle.net/dHDxd/3/)
甚至可以使用window[key] = data[key]
将它们导出到全局命名空间。
无论如何,要非常小心,因为破坏全局命名空间/覆盖其他东西/等的风险非常高。
extract()
function extract(data, where) {
for (var key in data) {
where[key] = data[key];
}
}
function runTest() {
var myData = { name: "Olly", age: 19, };
extract(myData, this);
alert(name +" is "+ age +"!");
}
runTest();
答案 1 :(得分:1)
这是更通用的/多级/循环命名空间提取器:)
function extract(rootObject, key) {
var parts = key.split('.');
var currentKey = parts.shift();
return parts.length > 0 ? extract(rootObject[currentKey], parts.join('.')) : rootObject[currentKey];
}
var myObject = { a: { b: { c: 7 }}};
console.log(extract(myObject, 'a.b.c'));
console.log(extract(myObject, 'a'));
答案 2 :(得分:0)
好像它就像""言。
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!"