/**
* 정의 패키지
* @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[levels[i]];
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} 클래스
* @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[property] || Class.prototype[property])
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 || 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 =
//부모 정의 class를 지정하고 하위 클래스의 프로토타입을 상위 클래스로 지정합니다.
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 ;
}
//프레임워크에서 생성된 클래스에 대한 기본 클래스를 정의합니다. .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. //
//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