이 방법은 작성자가 직접 만든 것이 아닙니다. 그냥 선배님들의 내용을 토대로 요약해서 간단하고 실용적인 자바스크립트 상속 방법을 생각해 냈습니다.
전통적인 JavaScript 상속은 프로토타입 프로토타입 체인을 기반으로 하며 많은 새로운 작업을 사용해야 하며 코드가 충분히 간결하지 않고 가독성이 그다지 좋지 않으며 프로토타입 체인 오염에 취약한 것 같습니다. .
저자가 요약한 상속 방법은 비록 최선의 방법은 아니지만 간결하고 명확하여 독자들에게 영감을 줄 수 있기를 바랍니다.
자, 더 이상 헛소리는 하지 말고 코드만 보면 주석이 자세하게 나와 있으니 한 눈에 이해가 되실 겁니다~~
/**
* 14-11-11에 Yang Yuan이 작성했습니다.
* 프로토타입을 사용하지 않고 상속 구현
*
*/
/**
* 자바스크립트 객체 복사, 하나의 레이어만 복사되고 함수 속성만 복사되는데 이는 보편적이지 않습니다!
* @param obj 복사할 객체
* @returns 객체
*/
Object.prototype.clone = 함수(){
var _s = 이것,
newObj = {};
_s.each(함수(키, 값){
if(Object.prototype.toString.call(value) === "[객체 함수]"){
newObj[키] = 값;
}
});
newObj 반환;
};
/**
* obj의 모든 속성을 탐색하세요
*
* @param 콜백 콜백 함수. 콜백에는 키 속성 이름, 값 속성 값
이라는 두 가지 매개변수가 포함됩니다.
*/
Object.prototype.each = 함수(콜백){
var 키 = "",
_이것=이것;
for (_this를 입력하세요){
if(Object.prototype.hasOwnProperty.call(_this, key)){
콜백(키, _this[키]);
}
}
};
/**
* 하위 클래스 생성
* @param ext obj에는 다시 작성하거나 확장해야 하는 메서드가 포함되어 있습니다.
* @returns 객체
*/
Object.prototype.extend = 함수(ext){
var child = this.clone();
ext.each(함수(키, 값){
자식[키] = 값;
});
아이를 돌려보내세요;
};
/**
* 객체(인스턴스) 생성
* @param 인수는 생성자 매개변수 목록으로 임의 개수의 매개변수를 허용합니다
* @returns 객체
*/
Object.prototype.create = function(){
var obj = this.clone();
if(obj.construct){
obj.construct.apply(obj, 인수);
}
obj 반환;
};
/**
* 사용예
* 번거로운 프로토타입과 새로운 것을 피하기 위해 이 상속 방법을 사용하십시오.
* 하지만 저자가 작성한 현재 예제에서는 부모 클래스의 기능(멤버 메서드로 이해 가능)만 상속할 수 있습니다.
* 더욱 풍부한 콘텐츠를 상속받고 싶다면 복제 방식을 개선해 주세요.
*
*
*/
/**
* 동물(부모클래스)
* @type {{construct: 구성하다, 먹다: 먹다}}
*/
var 동물 = {
구성: 함수(이름){
this.name = 이름;
},
먹다: function(){
console.log("내 이름은 "this.name"입니다. 먹을 수 있어요!");
}
};
/**
* 새(하위 카테고리)
* Birds는 상위 클래스의 eat 메소드를 재정의하고 fly 메소드를 확장합니다
* @type {하위 클래스|void}
*/
var Bird = Animal.extend({
먹다: 기능(음식){
console.log("내 이름은 " this.name "입니다. " 음식 "을 먹을 수 있어요!");
},
파리: 함수(){
console.log("나는 날 수 있어요!");
}
});
/**
* 새 인스턴스 생성
* @type {짐}
*/
var BirdJim = Bird.create("짐"),
BirdTom = Bird.create("톰");
BirdJim.eat("벌레"); //제 이름은 짐이에요. 벌레도 먹을 수 있어요!
BirdJim.fly(); //날 수 있어요!
BirdTom.eat("쌀"); //제 이름은 톰입니다. 밥 먹을 수 있어요!
새Tom.fly(); //날 수 있어요!