ホームページ >ウェブフロントエンド >jsチュートリアル >JS OOPパッケージの仕組み、クラス作成のメソッド定義_javascriptスキル

JS OOPパッケージの仕組み、クラス作成のメソッド定義_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:42:391448ブラウズ
コードをコピー コードは次のとおりです:

/**
* 定義パッケージ
* @param {} ns
* @return {}
*/
Xu .pkg = function(ns) {
if (!ns || !ns.length) {
return null;
}
var level = ns.split("."); >var nsobj = Xu;
for (var i = (levels[0] == "Xu") ? 1 : 0; i nsobj[levels[i]] = nsobj[レベル[i]] || {};
nsobj[レベル[i]]
戻り値
};



コードをコピー
コードは次のとおりです: // ------- ------ ------ Xu.Core.Class 名前空間 Xu.pkg("Core.Class"); var SYS_DEF_CLASS_NS = 'Xu.Class.Sys' ; 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(クラス))
Xu.pkg(Class.prototype.__pkg__)[Class.prototype.__class__] = null ;

Core.Class.hasProperty = function(Class,property){
if (Core.Class.isExist(Class))
if (Class[プロパティ] || Class.prototype[プロパティ])
return true ;
return false ;

/**
* シミュレーション クラス定義、パッケージ メカニズム、継承、ポリモーフィズムをサポート
* @param packageName {String} パッケージの名前
* @param className {String} クラスの名前
* @ param superClass {Class} 親クラスのオブジェクト
* @param classImp {Object} クラスの実装コード
* @param isOverride {Boolean} クラス定義が存在する場合、デフォルトでは上書きされません。 >*
* @return {関数}
*/
Core.Class.create = function(packageName,className,superClass,classImp,isOverride){
if (Core.Util.isNull(className) || className === " "){
return null ;

isOverride = isOverride ||
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 ; .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__ "]" ;
}
}
);
$this_class.prototype(
$this_class.prototype,classImp);
}
return $this_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 = 新しい Xu.Class. //
//var XClass_ = Core.Class.create(null,'XClass_',{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
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。