如何通过函数传递对对象的引用?
Posted
技术标签:
【中文标题】如何通过函数传递对对象的引用?【英文标题】:How do I pass a reference to an object via functions? 【发布时间】:2012-02-03 04:59:00 【问题描述】:我想做:
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);
但这当然会覆盖 store 是什么,而不是将其用作对命名空间属性的引用。正确的做法是什么?我认为 window[store] 会工作,但没有任何运气。
【问题讨论】:
在这种情况下,我想说的正确方法是从mkArray
返回数组并分配它; namespace.newarray = mkArray(xml, "artist")
【参考方案1】:
您可以创建一个对象,然后传递该对象。然后,修改对象的属性:
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
【讨论】:
我刚刚注意到稍微编辑的问题。我建议看看 Matts 的评论。如果您想更改您的功能,而不编辑其余调用,请使用:var storeProps = store.split('.'), store = window;for (var i=0; i<storeProps.length; i++) store = store[storeProps[i]];
。假设这些属性是全局定义的。【参考方案2】:
一般来说,最好避免使用有副作用的函数,例如改变他们的论点。如果你的函数应该创建一些东西,只需返回这个“东西”:
// 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);
【讨论】:
以上是关于如何通过函数传递对对象的引用?的主要内容,如果未能解决你的问题,请参考以下文章