/* == 모듈 및 NameSpace tool-func ==
* 작성자 : hongru.chen
* 날짜 : 2010-12-05
*/
var Module;
//모듈 확인 --> '모듈'이 존재하지 않는지 확인하세요
if (!!Module && (typeof Module != 'object' || Module.NAME)) throw new Error("NameSpace 'Module'이 이미 존재합니다!");
모듈 = {};
모듈.NAME = '모듈';
Module.VERSION = 0.1;
Module.EXPORT = ['require',
'importSymbols'];
Module.EXPORT_OK = ['createNamespace',
'isDefined',
'modules',
'globalNamespace'];
Module.globalNamespace = 이;
Module.modules = {'모듈': 모듈};
// 네임스페이스 생성 --> 최상위 네임스페이스 반환
Module.createNamespace = function (이름, 버전) {
if (!name) throw new Error('이름 필요');
if (name.charAt(0) == '.' || name.charAt(name.length-1) == '.' || name.indexOf('..') != -1) throw new Error('잘못된 이름');
var parts = name.split('.');
var 컨테이너 = Module.globalNamespace;
for (var i=0; i
var part = parts[i];
if (!컨테이너[부분]) 컨테이너[부분] = {};
컨테이너 = 컨테이너[부분];
}
var 네임스페이스 = 컨테이너;
if (namespace.NAME) throw new Error('모듈 "' 이름 '"이 이미 정의되어 있습니다.');
namespace.NAME = 이름;
if (버전) 네임스페이스.VERSION = 버전;
Module.modules[이름] = 네임스페이스;
네임스페이스를 반환합니다.
};
// 이름이 정의되었는지 확인하세요.
Module.isDefined = function (name) {
Module.modules에 이름을 반환합니다.
};
// 버전 확인
Module.require = function (이름, 버전) {
if (!(Module.modules의 이름)) throw new Error('모듈 ' 이름 '이(가) 정의되지 않았습니다.');
(!version)이 반환되는 경우;
var n = Module.modules[이름];
if (!n.VERSION || n.VERSION < version) throw new Error('버전 '버전' 이상이 필요합니다.');
};
// 모듈 가져오기
Module.importSymbols = function (from) {
if (typeof form == 'string') from = Module.modules[from];
var to = Module.globalNamespace; //잘못
var 기호 = [];
var firstsymbol = 1;
if (arguments.length>1 && typeof 인수[1] == 'object' && 인수[1] != null) {
to = 인수[1];
첫 번째 기호 = 2;
}
for (var a=firstsymbol; asymbols.push(arguments[a]);
}
if (symbols.length == 0) {
//기본 내보내기 목록
if (from.EXPORT) {
for (var i=0; ivar s = from.EXPORT[i];
to[s] = from[s];
}
반환;
} else if (!from.EXPORT_OK) {
// EXPORT 배열 && EXPORT_OK 배열 모두 정의되지 않음
for (var s in from) {
to[s] = from[s];
반환;
}
}
}
if (symbols.length > 0) {
var allowed;
if (from.EXPORT || form.EXPORT_OK) {
허용 = {};
if (from.EXPORT) {
for (var i=0; iallowed[from.EXPORT[i]] = true;
}
}
if (from.EXPORT_OK) {
for (var i=0; i허용[form.EXPORT_OK[i] ] = 사실;
}
}
}
}
//기호 가져오기
for (var i=0; ivar s = 기호 [나];
if (!(s in from)) throw new Error('기호 ' s '가 정의되지 않았습니다.');
if (!!allowed && !(s in allowed)) throw new Error(s '는 공개가 아니므로 가져올 수 없습니다');
to[s] = 형식[s];
}
}