0

这个链接之后,我为我的对象创建了一个命名空间:

var Namespace =
{
  Register : function(_Name)
  {
    var chk = false;
    var cob = "";
    var spc = _Name.split(".");
    for(var i = 0; i<spc.length; i++)
    {
      if(cob!=""){cob+=".";}
      cob+=spc[i];
      chk = this.Exists(cob);
      if(!chk){this.Create(cob);}
    }
    if(chk){ throw "Namespace: " + _Name + " is already defined."; }
  },

  Create : function(_Src)
  {
    eval("window." + _Src + " = new Object();");
  },

  Exists : function(_Src)
  {
    eval("var NE = false; try{if(" + _Src + "){NE = true;}else{NE = false;}}catch(err){NE=false;}");
    return NE;
  }
}

定义对象:

Namespace.Register("System.Classes.HelloWorld"); 

System.Classes.HelloWorld = function(aa){ return {

    Message : "Hello World!",

    Hello : function(a,b)
    {
        alert(this.Message + a + b);
    }

};}

如何将 jQuery NoConflict 传递给该对象并允许我使用 $ 符号?

例如本文创建了一个类似的对象,仅以我无法应用于上述代码的方式传入 jQuery NoConflict。

此代码包装 jQuery NoConflict 并允许我想复制的美元符号:

(function( skillet, $, undefined ) {
    //Private Property
    var isHot = true;

    //Public Property
    skillet.ingredient = "Bacon Strips";

    //Public Method
    skillet.fry = function() {
        var oliveOil;

        addItem( "\t\n Butter \n\t" );
        addItem( oliveOil );
        console.log( "Frying " + skillet.ingredient );
    };

    //Private Method
    function addItem( item ) {
        if ( item !== undefined ) {
            console.log( "Adding " + $.trim(item) );
        }
    }    
}( window.skillet = window.skillet || {}, jQuery ));
4

1 回答 1

0

您可能想尝试这种模式:

var Namespace = (function($) {
    //Private members
    var register = function(_Name) {
        //...
    };
    var create = function(_Src) {
        //...
    };
    var exists = function(_Src) {
        //...
    };

    //Expose public members
    return {
        register : register,
        create : create,
        exists : exists
    };
})(jQuery);

这不仅允许定义各种私有成员,而且还避免了使用Namespace.or为内部函数调用添加前缀的需要this.

于 2013-03-26T22:09:58.663 回答