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 获取和设置select下拉框的值实现代码
Nov 08 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
angularjs中ng-bind-html的用法总结
May 23 Javascript
create-react-app构建项目慢的解决方法
Mar 14 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
浅析node.js的模块加载机制
May 25 Javascript
用Node编写RESTful API接口的示例代码
Jul 04 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
JavaScript数组方法的错误使用例子
Sep 13 Javascript
教你如何编写Vue.js的单元测试的方法
Oct 17 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 mysql数据库操作类
2008/06/04 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
python @property的用法及含义全面解析
2018/02/01 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python如何操作mysql
2020/08/17 Python
详解python内置模块urllib
2020/09/09 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
数据库基础的一些面试题
2012/02/25 面试题
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
创业计划书详解
2019/07/19 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
MySQL 数据类型选择原则
2021/05/27 MySQL
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫