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 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
JavaScript中的排序算法代码
Feb 22 Javascript
使用VS开发 Node.js指南
Jan 06 Javascript
JavaScript电子时钟倒计时第二款
Jan 10 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
vuejs如何配置less
Apr 25 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
微信小程序实现滚动加载更多的代码
Dec 06 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 Javascript
vue递归实现树形组件
Jul 15 Vue.js
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 sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Farah官方网站:男士服装及配件
2019/11/01 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
几个常见的软件测试问题
2016/09/07 面试题
医学院毕业生自荐信范文
2014/03/06 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
社区工作者个人总结
2015/02/28 职场文书
2019年入党思想汇报
2019/03/25 职场文书
七年级作文之雪景
2019/11/18 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
python通过新建环境安装tfx的问题
2022/05/20 Python
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android