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技术-屏蔽类
Aug 15 Javascript
javascript时间自动刷新实现原理与步骤
Jan 06 Javascript
javascript验证上传文件的类型限制必须为某些格式
Nov 14 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
Oct 31 Javascript
jQuery选择器源码解读(一):Sizzle方法
Mar 31 Javascript
bootstrap中添加额外的图标实例代码
Feb 15 Javascript
Angular.js去除页面中显示的空行方法示例
Mar 30 Javascript
JavaScript实现简单的四则运算计算器完整实例
Apr 28 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
May 16 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 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默认安装产生系统漏洞
2006/10/09 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
基于php编程规范(详解)
2017/08/17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
vue axios封装及API统一管理的方法
2019/04/18 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
python实现抖音点赞功能
2019/04/07 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
大学生应聘导游自荐信
2014/06/02 职场文书
推广普通话标语
2014/06/27 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书