JS OOP包机制,类创建的方法定义


Posted in Javascript onNovember 02, 2009
/** 
* 定义包 
* @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
Javascript 相关文章推荐
slice函数的用法 之不错的应用
Dec 29 Javascript
js利用div背景,做一个竖线的效果。
Nov 22 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 Javascript
jQuery实现手势解锁密码特效
Aug 14 jQuery
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
JQuery 网站换肤功能实现代码
Nov 02 #Javascript
Javascript结合css实现网页换肤功能
Nov 02 #Javascript
cnblogs csdn 代码运行框实现代码
Nov 02 #Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 #Javascript
js 函数的执行环境和作用域链的深入解析
Nov 01 #Javascript
提高网站性能之 如何对待JavaScript
Oct 31 #Javascript
JavaScript Sort 表格排序
Oct 31 #Javascript
You might like
如何获得PHP相关资料
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
校园安全演讲稿
2014/05/09 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
大学生实训报告总结
2014/11/05 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
2014年变电站工作总结
2014/12/19 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
交通事故起诉书
2015/05/19 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python