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中this关键字使用方法详解
Mar 08 Javascript
Webkit的跨域安全问题说明
Sep 13 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
jQuery中[attribute]选择器用法实例
Dec 31 Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
Sep 20 Javascript
JS中微信小程序自定义底部弹出框
Dec 22 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
node.js实现上传文件功能
Jul 15 Javascript
javascript实现blob加密视频源地址的方法
Aug 08 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中cookie的作用域
2008/03/27 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
详解python中各种文件打开模式
2020/01/19 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
酒店应聘自荐信
2013/11/09 职场文书
工程售后服务承诺书
2014/05/21 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
2014年团委工作总结
2014/11/13 职场文书
玄武湖导游词
2015/02/05 职场文书
家长会开场白和结束语
2015/05/29 职场文书
教师继续教育反思周记
2015/06/25 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS