引用创建对象的函数var

时间:2012-07-26 04:07:07

标签: closures javascript-objects javascript

这是我想要使用的测试代码。

    function test() {
        var val = 'var ref',
            tobj = new testObj(this);

        tobj.alertParentVal(); //alert 'var ref'
        val = 'new val';
        tobj.alertParentVal(); //alert 'new val'
    }
    function testObj(o) {
       this.alertParentVal = function() {
            alert(o.val);
        }
    }

如果没有将'val'的值传递给新的testObj,我怎样才能引用'val'。如果这是不可能的。有没有办法保持对test()函数变量的引用,这样如果函数中的值发生变化,我可以使用对象中的新值。

2 个答案:

答案 0 :(得分:1)

除了全局对象外,变量不能作为适当的方式访问。

你需要给对象一个引用变量的函数,以便从变量范围之外读取它...

function test() {
    var val = 'var ref',
        tobj = new testObj(this);

    this.getVal = function() { return val; }; // accessor for the val variable

    tobj.alertParentVal(); //alert 'var ref'
    val = 'new val';
    tobj.alertParentVal(); //alert 'new val'


}
function testObj(o) {
   this.alertParentVal = function() {
        alert(o.getVal()); // get the variable
    }
}

DEMO: http://jsfiddle.net/a2HfG/1/

答案 1 :(得分:1)

作为替代方案,由于您已将此传递给testObj,因此您也可以将val指定为此属性。你可以这样做:

function test() {
    this.val = 'var ref';
    var tobj = new testObj(this);

    tobj.alertParentVal(); //alert 'var ref'
    this.val = 'new val';
    tobj.alertParentVal(); //alert 'new val'
}

function testObj(o) {
   this.alertParentVal = function() {
        alert(o.val); // get the variable
    }
}