2011-01-11 85 views
-2
var objectTest= 
{ 
    test1: function() 
    { 
     val1 = 1; 
    }, 

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

objectTest.test2(); 
+0

你是说它正在访问它吗? – 2011-01-11 03:32:05

+0

这个问题根本不清楚。 – Pointy 2011-01-11 03:39:01

回答

4

通过不使用变量放在不同的(全球)范围前缀var尝试,而不是:

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

由于@Pekka指出,您的示例(上述)需要先拨打objectTest.test1();(创建val1),否则您会收到错误消息。如果您想从两地访问变量,那么你应该宁可使用对象属性(如@patrick DW建议)不添加到全局范围

objectTest.test1(); 
objectTest.test2(); //Shows: Alert-1 
alert(val1); //Shows: Alert-1 
val1=2; 
objectTest.test(2); //Shows: Alert-2 
1

这不可能。两个功能不能同时运行,因此共享本地范围是不可能的。您必须将val1定义为该对象的成员。

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(); 
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()函数,它返回一个包含一个函数,它引用局部变量的对象。

这个(或类似的东西)是引用一个函数中另外一个不可访问的局部变量所需要的。

相关问题