这是我想要使用的测试代码。
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()函数变量的引用,这样如果函数中的值发生变化,我可以使用对象中的新值。
答案 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
}
}
答案 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
}
}