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 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
javascript 全选与全取消功能的实现代码
Dec 23 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
Sep 10 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
Apr 26 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
Jun 23 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
详解vue2.0模拟后台json数据
May 16 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
input的focus方法使用
2010/03/13 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
在Python中使用__slots__方法的详细教程
2015/04/28 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python程序输出无内容的解决方式
2020/04/09 Python
jupyter notebook 重装教程
2020/04/16 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python实现简单猜数字游戏
2021/02/03 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
优质的学校老师推荐信
2013/10/28 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
客户经理岗位职责
2013/12/08 职场文书
组织关系转移介绍信
2014/01/16 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
土地转让协议书
2014/09/27 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
地道战观后感2000字
2015/06/04 职场文书
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python