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 学习笔记 element属性控制
Jul 23 Javascript
JQuery jsonp 使用示例代码
Aug 12 Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
js通过指定下标或指定元素进行删除数组的实例
Jan 12 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
Node爬取大批量文件的方法示例
Jun 28 Javascript
Vue中对iframe实现keep alive无刷新的方法
Jul 23 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
使用preload预加载页面资源时注意事项
Feb 03 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
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
Python创建日历实例
2014/08/21 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
pytorch的batch normalize使用详解
2020/01/15 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
医务人员自我评价
2014/01/26 职场文书
初三政治教学反思
2014/01/30 职场文书
心理咨询承诺书
2014/05/20 职场文书
党员自我对照检查材料
2014/08/19 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
2014年就业工作总结
2014/11/26 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
Python基础详解之邮件处理
2021/04/28 Python
浅谈JS的原型和原型链
2021/06/04 Javascript