Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过函数传递对对象的引用?_Javascript_Jquery_Arrays_Namespaces_Reference - Fatal编程技术网

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

Javascript 如何通过函数传递对对象的引用?,javascript,jquery,arrays,namespaces,reference,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); } 当然,这会覆盖存储的内容,而不是将其用作对命名空间属性的引用。正确的做

我想做:

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

当然,这会覆盖存储的内容,而不是将其用作对命名空间属性的引用。正确的做法是什么?我原以为window[store]可以工作,但运气不好。

您可以创建一个对象,然后传递该对象。然后,修改对象的属性:

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
}
var引用={store:void 0};//或者只是{};

mkArray(xml、标记、引用);// 一般来说,最好避免有副作用的函数,例如更改其参数。如果您的函数应该创建一些东西,只需返回以下“东西”:

如果出于某种原因,这对您不起作用,您也可以修改函数参数,但对象本身应该在调用代码中创建:

// worse, but possible 

function mkArray(xml, tag, store) {
   // populate store...
}

myStore = [];
mkArray(xml, tag, myStore);

在这种情况下,我认为正确的方法是从
mkArray
返回数组并分配它
namespace.newarray=mkArray(xml,“artist”)
我刚刚注意到一个略带编辑的问题。我建议大家看看Matts的评论。如果要更改函数,而不编辑其余调用,请使用:
var storeProps=store.split('.')、store=window;对于(var i=0;i
// worse, but possible 

function mkArray(xml, tag, store) {
   // populate store...
}

myStore = [];
mkArray(xml, tag, myStore);