var objectTest=
{
test1: function( )
{
val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( val1 );
}
};
objectTest.test2( );
问问题
3007 次
4 回答
4
通过不使用前缀var
,变量被放置在不同的(全局)范围内,而是尝试:
test1: function() {
var val1=1;
},
正如@Pekka 指出的那样,您的示例(上面)需要调用objectTest.test1();
first (创建val1
),否则您将收到错误消息。如果您想从两个地方访问变量,那么您应该使用不添加到全局范围的对象属性(如@patrick dw 建议)
objectTest.test1();
objectTest.test2(); //Shows: Alert-1
alert(val1); //Shows: Alert-1
val1=2;
objectTest.test(2); //Shows: Alert-2
于 2011-01-11T03:32:11.650 回答
1
它不能。两个函数不能同时运行,所以共享本地范围是不可能的,你展示的方式。您必须定义val1
为对象的成员。
于 2011-01-11T03:32:27.833 回答
0
取决于你最终想要做什么。您可以将其设为对象的公共成员:
示例:http: //jsfiddle.net/wqr6W/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( this.val1 );
}
};
objectTest.test1( );
objectTest.test2( );
这当然会更改您的原始代码。你实际需要做什么取决于你的情况。
或这个:
示例:http: //jsfiddle.net/wqr6W/1/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
this.test1();
alert( this.val1 );
}
};
objectTest.test2( );
于 2011-01-11T03:32:41.650 回答
0
添加另一个答案以便更直接地回答问题。
如果您实际上是在谈论函数的局部变量,那么简单的答案是您无法访问它,除非您将函数从具有该变量的函数中传递出来,从而引用该变量。
这称为创建闭包。
示例:http: //jsfiddle.net/csd3s/
var objectTest=
{
test1: function( )
{
var val1 = 1;
return {getVal:function() {
return val1;
}};
},
// hows accessing the
test2: function( )
{
alert( this.test1().getVal() );
}
};
objectTest.test2( );
所以在里面test2
你可以调用test1()
函数,它返回一个包含函数的对象,该函数引用了局部变量。
那(或类似的东西)是在函数中引用其他不可访问的局部变量所需要的。
于 2011-01-11T03:56:49.573 回答