JS OOP 包机制,类创建 的方法定义
2016-08-25 16:20
225 查看
/** * 定义包 * @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);
测试使用的,呵呵 /...
相关文章推荐
- 在js中创建自己定义的对象和变量还有方法
- JS中定义对象方式二: 使用工厂方式创建对象(传递参数,及其改进方法)
- [置顶] JS简单原生-定义一个创建HTML列表的方法
- js,apply()方法创建数组
- JS OOP包机制,类创建的方法定义
- js 创建带参数的事件方法
- 一个封装的创建DOM元素的JS方法
- JS中定义类的方法
- objective-C 的OOP(上)--类定义、继承及方法调用
- PHP5—OOP,__autoload(类文件自动加载规则)的定义方法及分析
- 讨论javascript(一)工厂方式 js面象对象的定义方法
- js技巧--创建class时调用prototype原型方法
- js入门实例の构造函数\方法的定义和调用\原型对象
- [转]IE下使用excanvas.js之后,动态创建的canvas不支持getContext的解决方法
- js判断一个变量是否定义的方法
- js创建对象的几种方法
- 使用js动态创建控件的方法
- JS类中定义原型方法的两种实现的区别
- php5的oop2--定义方法和属性
- js里面window.open方法的详细定义和用法