Javascript - 在函数内设置变量值

时间:2009-10-02 20:04:49

标签: javascript

我想声明一些变量,然后让一个函数构建实际的对象,并为这些先前声明的变量分配它们的引用。

我现在这样做的方式很有效,但是很多变量都很繁琐。

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

我想避免写这些乏味的线条。就像createElementappendChild一样,一个函数调用就足够了!

更新:经过一番思考,我相信用Javascript无法做到这一点。我希望在某个地方隐藏一些隐藏的Javascript魔法,但我有理由认为它不会发生。

基本上,我想在不创建新引用的情况下为变量引用分配新值。但函数参数a与它所代表的变量v不同。指向的对象是相同的,但两个变量的地址是不同的。因此,为a分配新值无法以任何方式更改v的值。

换句话说,每个变量都有自己的地址,并且没有任何其他方法可以改变它指向的内容,而不是明确地引用它。

在我的情况下,因为ref对函数是“私有的”,所以无法从其他地方访问它。

太糟糕了......

1 个答案:

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