javascript 컨트롤 개발 의 계승 관계
4357 단어 JavaScript프레임컨트롤 개발
디 렉 터 리 common 에 extend. js 파일 을 추가 하고 함수 Extend 를 정의 합 니 다. 그 중에서 세 개의 매개 변 수 를 가지 고 있 습 니 다. 첫 번 째 매개 변 수 는 기본 클래스 이 고 두 번 째 매개 변 수 는 하위 클래스 이 며 세 번 째 매개 변 수 는 연결 this 상태 입 니 다. 편리 하도록 저희 매개 변 수 는 호 환 처 리 를 했 습 니 다. 즉, 하위 클래스 childClass 만 처리 할 수 있 습 니 다.
function Extend(baseClass, childClass, isBind) {
// jClass({}, true)
if(typeof childClass === "boolean"){
isBind = childClass;
}
// - jClass(childClass)
if (typeof (baseClass) === "object") {
childClass = baseClass;
baseClass = null;
}
}
편 의 를 위해 우리 의 후속 적 인 유형 구 조 는 모두 json 구 조 를 위주 로 한다. 그러면 우 리 는 json 대상 을 표준 적 인 함수 구조 로 바 꾸 고 기본 적 인 방법 을 하위 클래스 로 복사 하고 동명 함 수 를 합병 해 야 한다.
따라서 다음 에 함수 에 함수 체 curClass 를 추가 하고 동명 함 수 를 합병 하 는 방법 mergeFunc 를 추가 합 니 다. 나머지 는 함수 prototype 의 계승 조정 과 함수 와 속성의 복사 와 구축 입 니 다.
function Extend(baseClass, childClass, isBind) {
// jClass({}, true)
if(typeof childClass === "boolean"){
isBind = childClass;
}
// - jClass(childClass)
if (typeof (baseClass) === "object") {
childClass = baseClass;
baseClass = null;
}
// ,
var initializing = false;
/**
* , ( )
*/
function curClass() {
// , init
if (!initializing) {
//
if(typeof this.init == "function") {
this.init.apply(this, arguments);
}
}
}
/**
*
* , , ,
* , this.base, ,
* ,
*/
function mergeFunc(funcName) {
//
var func = function() {
// base
var _base = this.base;
// this.base , 。
this.base = baseClass.prototype[funcName];
// ,
var result = childClass[funcName].apply(this, arguments);
// this.base
this.base = _base;
//
return result;
};
//
return func;
}
//
if (baseClass) {
initializing = true;
// , javascript
curClass.prototype = new baseClass();
curClass.prototype.constructor = curClass;
initializing = false;
}
// prototype
for (var name in childClass) {
if (childClass.hasOwnProperty(name)) {
// baseClass name
if (baseClass && typeof (childClass[name]) === "function"
&& typeof (curClass.prototype[name]) === "function") {
//
curClass.prototype[name] = mergeFunc(name);
} else {
curClass.prototype[name] = childClass[name];
}
}
}
// prototype
for(var name in baseClass){
if(typeof baseClass[name] !== "function") continue;
curClass[name] = baseClass[name];
}
// bind this ,
if(isBind){
for(var name in curClass.prototype){
if(typeof curClass.prototype[name] === "function"){
curClass.prototype[name] = curClass.prototype[name].bind(this);
}
}
}
return curClass;
}
이 파일 을 추가 한 후, 우리 의 디 렉 터 리 는 다음 과 같 습 니 다.
+--demo
+--script
+--common
+--init.js
+--staticScript.js
+--extend.js
+--css
+--com.comStyle.css
+--web
+--test.html
staticScript. js 파일 에 추가
staticScript = [
"../css/com.comStyle.css",
"extend.js"
]
이렇게 해서 우리 의 대상 을 향 한 상속 관 계 는 완성 되 었 다.
원본 코드 첨부 파일
다음, javascript 컨트롤 개발 렌 더 링 대상 을 주목 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.