2

如何使函数内的静态成员在命名空间内公开

var myNamespace= new function()
{
    this.myClass= function Page()
    {
        this.MyStaticVar = "myValue";
    }
}

$("#block").html(myNamespace.myClass.MyStaticVar); 

http://jsfiddle.net/DSs6r/97/

请在那里尝试...

4

3 回答 3

3

“命名空间”不应该是一个函数,this在任何一种情况下都不正确。

var myNamespace = {
    myClass: function Page() {
    }
};

myNamespace.myClass.MyStaticVar = "myValue";

(更新 jsFiddle)

于 2012-12-26T23:04:05.410 回答
0

像这样:

var ns = {
   Class: {
       myStaticVar: 'myValue' 
   }
};
于 2012-12-26T23:08:20.000 回答
0

这里唯一真正的主要问题是您使用了命名函数而不是匿名函数 ( function Page())。没有名称,您的代码可以正常工作:

var myNamespace = new function()
{
 this.myClass = new function()
 {
  this.MyStaticVar = "myValue";
 };
};

这是一个显示代码工作的 jsfiddle:http: //jsfiddle.net/DSs6r/101/

您很可能正在寻找这样的设置:

var myNamespace = new function()
{
 var Page = function(){
     var MyStaticVar = "myValue";
     var MyDynamicVar = "";

     function SetDynamicVar(val){
      MyDynamicVar = val;  
     };

     function GetDynamicVar(){
      return MyDynamicVar;  
     }

     return{
         MyStaticVar: MyStaticVar,
         SetDynamicVar: SetDynamicVar,
         GetDynamicVar: GetDynamicVar
     };
 };
 this.myClass = new Page();
};

这将允许这样的事情:

myNamespace.myClass.SetDynamicVar("someValue")
$("#block").html(myNamespace.myClass.GetDynamicVar());

和:

$("#block").html(myNamespace.myClass.MyStaticVar);

这是工作小提琴:http: //jsfiddle.net/DSs6r/102/

于 2012-12-26T23:35:30.507 回答