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下申明对象的几种方法小结
Oct 02 Javascript
javascript权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
May 11 Javascript
javascript之IE版本检测超简单方法
Aug 20 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 Javascript
Vue2.0用户权限控制解决方案
Nov 29 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
ES6 Symbol在对象中的作用实例分析
Jun 06 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 Javascript
Vant 在vue-cli 4.x中按需加载操作
Nov 05 Javascript
在vue项目中封装echarts的步骤
Dec 25 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
收音机术语解释
2021/03/01 无线电
Codeigniter校验ip地址的方法
2015/03/21 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python合并多个装饰器小技巧
2015/04/28 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Python requests上传文件实现步骤
2020/09/15 Python
python自动化发送邮件实例讲解
2021/01/04 Python
如何查看python关键字
2021/01/17 Python
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
党员三严三实对照检查材料
2014/10/13 职场文书
校长师德表现自我评价
2015/03/04 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书