0

这是我想要工作的测试代码。

    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() 函数变量的引用,以便如果函数中的值发生变化,我可以使用对象中的新值。

4

2 回答 2

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
    }
}

演示:http: //jsfiddle.net/a2HfG/1/

于 2012-07-26T04:12:11.167 回答
1

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

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
    }
}
于 2012-07-26T04:44:30.397 回答