Javascript中的命名空间别名

时间:2014-01-13 05:16:27

标签: javascript

有人可以通过以下Javascript告诉我 -

1)如何使用“Base”变量?

2)在callShowMsg函数中,局部变量“ns”用于别名空间。

是否可以使用全局变量来命名空间?它将避免在每个函数中声明局部变量。

提前致谢。

我的代码是,

var Base = namespace("MyCo.MyApp.Myprogram");

MyCo.MyApp.Myprogram = 
    {

        showMsg: function (pMsg) 
        {
            alert(pMsg);
        },

        callShowMsg: function (pMsg) 
        {

            var ns = MyCo.MyApp.Myprogram;            
            ns.showMsg('Hello');            

        }

    }

3 个答案:

答案 0 :(得分:0)

类似的东西:( YUI带有一些自定义命名空间的后备)。虽然我相信你不必“命名空间”或引用obj。只需将其称为“此”即可。 所以,如果你在obj中,你可以调用这样的方法:this.showMsg('somevalue')

function createNamespace() {
var uniqueNS = "MyCo";
var a = arguments, o, i = 0, j, d, arg,
    ns = this,
    PERIOD = ".";

// force namespace to MyCo
ns.uniqueNS = ns.uniqueNS || {};
ns = ns.uniqueNS;

for (; i < a.length; i++) {
  o = ns; //Reset base object per argument or it will get reused from the last
  arg = a[i];
  if (arg.indexOf(PERIOD) > -1) { //Skip this if no "." is present
    d = arg.split(PERIOD);
    for (j = (d[0] == uniqueNS) ? 1 : 0; j < d.length; j++) {
      o[d[j]] = o[d[j]] || {};
      o = o[d[j]];
    }
  } else {
    o[arg] = o[arg] || {};
    o = o[arg]; //Reset base object to the new object so it's returned
  }
}
   return o;
 }

var Base = createNamespace("MyCo.MyApp.Myprogram");

Base = 
   {

      showMsg: function (pMsg) 
       {
           alert(pMsg);
       },

       callShowMsg: function (pMsg) 
       {        
        this.showMsg(pMsg);            

        }

   }

  Base.showMsg('ok');

答案 1 :(得分:0)

我不认为像上面写的那样有像命名空间这样的函数, 你可以这样做:

var MYAPPLICATION = {
    calculateVat: function (base) {
        return base * 1.21;
    },
    product: function (price) {
        this.price = price;
        this.getPrice = function(){
                          return this.price;
                       };
    },
    doCalculations: function () {
        var p = new MYAPPLICATION.product(100);
        alert(this.calculateVat(p.getPrice()));
    }
}

或者如果您想使用嵌套的命名空间,可以试试这个:

var MYAPPLICATION = {
    MODEL: {
        product: function (price) { 
                     this.price = price; 
                    this.getPrice = function(){
                         return this.price;
                     };
                 }
    },
    LOGIC: {
        calculateVat: function (base) {
            return base * 1.21;
        },
        doCalculations: function () {
            var p = new MYAPPLICATION.MODEL.product(100);
            alert(this.calculateVat(p.getPrice()));
        }
    }
}

答案 2 :(得分:0)

  1. 如何使用“Base”变量?

    这将取决于namespace函数返回的值。这不是一个标准的JS函数,它可能特定于你正在使用的库,所以我无法回答。

  2. 是否可以使用全局变量来命名空间?

  3. 当然。

    var ns = {
        callShowMsg: function (pMsg) 
        {         
            ns.showMsg('Hello');            
        }
    }
    
    MyCo.MyApp.Myprogram = ns;
    

    您还可以将ns放入一个本地函数而不是全局函数,方法是将它放在一个初始化函数中,将其置于脚本顶层。最常见的方法是使用立即调用的匿名函数:

    (function(){
       var ns = {
            callShowMsg: function (pMsg) 
            {         
                ns.showMsg('Hello');            
            }
        }
    
        MyCo.MyApp.Myprogram = ns;
    }());