我想这样做:
mkArray(xml, "artist", "namespace.newarray");
function mkArray(xml, tag, store){
store = [];
$(xml).find(tag).each(function(i,v){
store.push($(this).text());
});
console.log(store);
}
但当然这会覆盖商店,而不是将其用作对命名空间属性的引用。什么是正确的解决方法?我认为窗口[商店]会起作用,但没有运气。
答案 0 :(得分:3)
您可以创建一个对象,并传递该对象。然后,修改对象的属性:
var reference = {store: void 0}; // Or just {};
mkArray(xml, tag, reference); // <-- Pass the "reference"
console.log(reference.store); // <--- Yup.
function mkArray(xml, tag, o_store){
o_store.store = [];
$(xml).find(tag).each(function(i,v){
store.push($(this).text());
});
// console.log(o_store.store); // Look ahead
}
答案 1 :(得分:1)
一般来说,最好避免使用具有副作用的功能,例如:改变他们的论点。如果你的函数应该创建一些东西,只需返回这个“东西”:
// good way
function mkArray(xml, tag) {
var store = [];
// populate store...
return store;
}
myStore = mkArray(xml, tag);
如果由于某种原因,这对你不起作用,你也可以修改函数参数,但是应该在调用代码中创建对象本身:
// worse, but possible
function mkArray(xml, tag, store) {
// populate store...
}
myStore = [];
mkArray(xml, tag, myStore);