-2
var objectTest=
{
    test1:  function( )
    {
       val1 = 1;
    },

    // hows accessing the 
    test2:  function( )
    {
       alert( val1 );
    }
};

objectTest.test2( );
4

4 回答 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 回答