JS OOP包机制,类创建的方法定义 |
本文标签:JS,OOP 复制代码 代码如下: /** * 定义包 * @param {} ns * @return {} */ Xu.pkg = function(ns) { if (!ns || !ns.length) { return null; } var levels = ns.split("."); var nsobj = Xu; for (var i = (levels[0] == "Xu") ? 1 : 0; i < levels.length; ++i) { nsobj[levels[i]] = nsobj[levels[i]] || {}; nsobj = nsobj[levels[i]]; } return nsobj; }; 复制代码 代码如下: // ------------------- Xu.Core.Class命名空间 Xu.pkg("Core.Class"); var SYS_DEF_CLASS_NS = Xu.Class.Sys ; var USER_DEF_CLASS_NS = Xu.Class.Custom ; /** * 验证类是否存在 * @param {String} Class * @return {Boolean} */ Core.Class.isExist = function(Class){ if (Core.Util.isFunction(Class)) return true ; return false ; }; Core.Class.remove = function(Class){ if (Core.Class.isExist(Class)) Xu.pkg(Class.prototype.__pkg__)[Class.prototype.__class__] = null ; }; Core.Class.hasProperty = function(Class,property){ if (Core.Class.isExist(Class)) if ( Class[property] || Class.prototype[property]) return true ; return false ; }; /** * 模拟类的定义 , 支持包机制,继承和多态 * @param packageName {String} 包的名字 * @param className {String} 类的名字 * @param superClass {Class} 父类对象 * @param classImp {Object} 类的实现代码 * @param isOverride {Boolean} 是否覆盖,当类定义存在时,缺省不覆盖 * * @return {Function} */ Core.Class.create = function(packageName,className,superClass,classImp,isOverride){ if (Core.Util.isNull(className) || className === ""){ return null ; } isOverride = isOverride || false ; try { var $this_class = eval(packageName + "." +className); if (Core.Class.isExist($this_class)) { trace( "isExist: " + className + " Override:" + isOverride ); if (!isOverride){ return null ; } } } catch(e){ //如果出异常,说明该类没有定义 } if (Core.Util.isNull(packageName) || packageName === ""){ packageName = USER_DEF_CLASS_NS ; } $this_pkg = Xu.pkg(packageName); //定义父类,将子类的原型 指向父类 if (Core.Util.isNull(superClass) || superClass === ""){ // superClass = Object ; superClass = Xu.Class.Sys.XClass ; } //定义类 $this_class = $this_pkg[className] = function(){}; // 将子类的原型 指向父类,以此获取属性继承 $this_class.prototype = new superClass(); Object.extend($this_class.prototype , { __pkg__: packageName , __superclass__: $this_class.prototype[__class__] || Object, __class__: className , toString: function(){ return "[class: " + this.__pkg__ + "." + this.__class__ + "]" ; } } ); if (Core.Util.isObject(classImp)){ $this_class.prototype = Object.extend( $this_class.prototype,classImp); } return $this_class ; } ; //定义基类, 用于框架中所创建的类的基类. Core.Class.create(SYS_DEF_CLASS_NS,XClass,Object,{ version: V0.1 }); // Xu.Core.Class 测试区域 //测试 类覆盖定义 ; //Core.Class.create(SYS_DEF_CLASS_NS,XClass,Object,{ // version: V0.5 //},true); // //// 测试 类属性检查方法 ; //Xu.Class.Sys.XClass.ve = 2 ; //trace(Core.Class.hasProperty(Xu.Class.Sys.XClass,ve)); // ////Core.Class.remove(Xu.Class.Sys.XClass); // //var x_class = new Xu.Class.Sys.XClass(); //trace(x_class.toString() + x_class.version ); //traceobj(XClass,Xu.Class.Sys.XClass.prototype); //// //var XClass_ = Core.Class.create(null,XClass_,null,{h:hello}); //// //var x_class_ = new XClass_(); //trace(x_class_.toString() + x_class_.version ); //traceobj(XClass_,XClass_.prototype); //// //var X_ = Core.Class.create(null,X_,XClass_,null); //// //var x_ = new X_(); //trace(x_.toString() + x_.version ); //traceobj(X_,X_.prototype); 测试使用的,呵呵 /... 作者:vb2005xu |