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 相关文章推荐
基于jquery的分页控件(C#)
Jan 06 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
Nov 15 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
Sep 02 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
vue-cli+webpack项目 修改项目名称的方法
Feb 28 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
微信小程序实现聊天室
Aug 21 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+xslt在windows平台上
2006/10/09 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python 字典操作提取key,value的方法
2019/06/26 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
详解python的变量缓存机制
2021/01/24 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
音乐课外活动总结
2015/05/09 职场文书
遗失证明范文
2015/06/19 职场文书