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 20 Javascript
jQuery示例收集
Nov 05 Javascript
jQuery的:parent选择器定义和用法
Jul 01 Javascript
有效提高JavaScript执行效率的几点知识
Jan 31 Javascript
谈谈impress.js初步理解
Sep 09 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
HTML的select控件美化
Mar 27 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
JS几个常用的函数和对象定义与用法示例
Jan 15 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 Javascript
JavaScript中layim之整合右键菜单的示例代码
Feb 06 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设计模式之观察者模式的应用详解
2013/05/21 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
详解PHP队列的实现
2019/03/14 PHP
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Django小白教程之Django用户注册与登录
2016/04/22 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python绘制雪景图
2019/12/16 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python 读取位于包中的数据文件
2020/08/07 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
《花瓣飘香》教学反思
2014/04/15 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
学校开除通知书
2015/04/25 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书