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提升性能最佳实践小结
Dec 06 Javascript
jQuery图片轮播的具体实现
Sep 11 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
JS弹出可拖拽可关闭的div层完整实例
Feb 13 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
js带点自动图片轮播幻灯片特效代码分享
Sep 07 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
JS无缝滚动效果实现方法分析
Dec 21 Javascript
js Element Traversal规范中的元素遍历方法
Apr 19 Javascript
最简单的vue消息提示全局组件的方法
Jun 16 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
JavaScript中继承原理与用法实例入门
May 09 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 nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP中phar包的使用教程
2017/06/14 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python 代码运行时间获取方式详解
2020/09/18 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
企业行政文员岗位职责
2013/12/03 职场文书
关于打架的检讨书
2014/01/17 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
健康证明
2015/06/19 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
深入浅析React中diff算法
2021/05/19 Javascript