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

別の方法として、これを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 に答える