JS OOP包機制,類創(chuàng)建的方法定義
更新時間:2009年11月02日 13:17:58 作者:
JS OOP包機制,類創(chuàng)建的方法定義,需要的朋友可以參考下。
復(fù)制代碼 代碼如下:
/**
* 定義包
* @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;
};
復(fù)制代碼 代碼如下:
// ------------------- 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 ;
};
/**
* 模擬類的定義 , 支持包機制,繼承和多態(tài)
* @param packageName {String} 包的名字
* @param className {String} 類的名字
* @param superClass {Class} 父類對象
* @param classImp {Object} 類的實現(xiàn)代碼
* @param isOverride {Boolean} 是否覆蓋,當(dāng)類定義存在時,缺省不覆蓋
*
* @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 ;
} ;
//定義基類, 用于框架中所創(chuàng)建的類的基類.
Core.Class.create(SYS_DEF_CLASS_NS,'XClass',Object,{
'version': 'V0.1'
});
// Xu.Core.Class 測試區(qū)域
//測試 類覆蓋定義 ;
//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
您可能感興趣的文章:
- JS創(chuàng)建類和對象的兩種不同方式
- 跟我學(xué)習(xí)javascript創(chuàng)建對象(類)的8種方法
- JavaScript 創(chuàng)建對象和構(gòu)造類實現(xiàn)代碼
- JavaScript 常見對象類創(chuàng)建代碼與優(yōu)缺點分析
- JavaScript創(chuàng)建類/對象的幾種方式概述及實例
- 創(chuàng)建js對象和js類的方法匯總
- Javascript創(chuàng)建類和對象詳解
- JavaScript構(gòu)造函數(shù)詳解
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式)
- JS中的構(gòu)造函數(shù)詳細(xì)解析
- 深入理解javascript構(gòu)造函數(shù)和原型對象
- JavaScript 面向?qū)ο蟪绦蛟O(shè)計詳解【類的創(chuàng)建、實例對象、構(gòu)造函數(shù)、原型等】
相關(guān)文章
js實現(xiàn)圖片粘貼上傳到服務(wù)器并展示的實例
下面小編就為大家?guī)硪黄猨s實現(xiàn)圖片粘貼上傳到服務(wù)器并展示的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11javascript代碼調(diào)試之console.log 用法圖文詳解
對于開始學(xué)js的朋友可能不知道為什么用console.log,頁面中也看不到信息,對于這個console.log腳本之家小編特整理與介紹一下,方便需要的朋友2016-09-09javascript+xml技術(shù)實現(xiàn)分頁瀏覽
基于web的技術(shù)中,分頁是一個老的不能再老的,但大家津津樂道的問題,隨著xml技術(shù)的日漸應(yīng)用,把xml應(yīng)用到分頁當(dāng)中,也是一種可能,當(dāng)然網(wǎng)上的教程很多,當(dāng)我都是看得稀里糊涂,索性自己寫一個,與大家分享、指正。2008-07-07JavaScript實現(xiàn)經(jīng)緯度轉(zhuǎn)換常用方法總結(jié)
WGS84坐標(biāo)系、GCJ02坐標(biāo)系、BD09坐標(biāo)系和Web 墨卡托投影坐標(biāo)系是我們常見的四個坐標(biāo)系。這篇文章為大家整理了這四個坐標(biāo)系之間相互轉(zhuǎn)換的方法,需要的可以參考一下2023-02-02解決Babylon.js中AudioContext was not allowed&nbs
這篇文章主要介紹了解決Babylon.js中AudioContext was not allowed to start異常問題方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04