Как передать ссылку на объект через функции? - PullRequest
4 голосов
/ 05 января 2012

Я хочу сделать:

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 ]

3 голосов
/ 05 января 2012

Вы можете создать объект и передать объект. Затем измените свойство объекта:

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 голос
/ 05 января 2012

В общем, лучше избегать функций, которые имеют побочные эффекты, например, изменять свои аргументы.Если ваша функция должна что-то создать, просто верните это «что-то»:

// 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);
...