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 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
jquery提升性能最佳实践小结
Dec 06 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
document.forms用法示例介绍
Jun 26 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
微信小程序 页面传参实例详解
Nov 16 Javascript
微信小程序实现图片自适应(支持多图)
Jan 25 Javascript
bootstrap实现二级下拉菜单效果
Nov 23 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
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中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
Python测试人员需要掌握的知识
2018/02/08 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python中包的用法及安装
2020/02/11 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
为什么要用EJB
2014/04/17 面试题
给学校建议书范文
2014/05/13 职场文书
社会公德演讲稿
2014/05/20 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
Python操作CSV格式文件的方法大全
2021/07/15 Python