我想声明一些变量,然后让一个函数构建实际的对象,并为这些先前声明的变量分配它们的引用。
我现在这样做的方式很有效,但是很多变量都很繁琐。
function bar(obj) {
var newObject = {'an':'object'};
obj['element'] = newObject;
}
function foo() {
var ref={};
bar(ref);
ref=ref.element; // Tedious line
}
对于那些想知道我为什么要这样做的人,我构建了一个简单的函数来从JSON生成DOM。它就是这样的,#bind
曾用bar
执行上一段代码中的操作:
var legend = {};
$('#element').append(['form',['fieldset',
['legend',{'#bind':legend},['text':'Legend title']]
]].getDomForThis());
legend=legend.element;
现在我可以在图例之后添加一些新元素,例如
for(fieldName in fields) {
legend.insertAfter(['div',[['input',['name':fieldName]],...]].getDomForThis());
}
我想避免写这些乏味的线条。就像createElement
和appendChild
一样,一个函数调用就足够了!
更新:经过一番思考,我相信用Javascript无法做到这一点。我希望在某个地方隐藏一些隐藏的Javascript魔法,但我有理由认为它不会发生。
基本上,我想在不创建新引用的情况下为变量引用分配新值。但函数参数a
与它所代表的变量v
不同。指向的对象是相同的,但两个变量的地址是不同的。因此,为a
分配新值无法以任何方式更改v
的值。
换句话说,每个变量都有自己的地址,并且没有任何其他方法可以改变它指向的内容,而不是明确地引用它。
在我的情况下,因为ref
对函数是“私有的”,所以无法从其他地方访问它。
太糟糕了......
答案 0 :(得分:1)
由于JavaScript中没有byRef,因此您的代码和以下内容相同
function bar(obj) {
return {'an':'object'};
}
function foo() {
var obj = {};
obj.element = bar();
}
然而,你可能会做类似的事情:
function Foo() {
this.that = this,
this.obj = {};
this.bar = function () {
var newObject = {'an':'object'};
that.obj['element'] = newObject;
}
return this;
}
var f = Foo();
f.obj['foo'] = 'BAR';
f.bar();
console.log(f.obj.element.an);