如何通过函数传递对象的引用?

时间:2012-01-05 10:56:31

标签: javascript jquery arrays namespaces reference

我想这样做:

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);
}

但当然这会覆盖商店,而不是将其用作对命名空间属性的引用。什么是正确的解决方法?我认为窗口[商店]会起作用,但没有运气。

2 个答案:

答案 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);