이 방법은 저자가 독창적이지 않습니다. 방금 전임자를 기반으로 요약하고 간결하고 실용적인 JavaScript 상속 방법을 생각해 냈습니다.
전통적인 JavaScript는 프로토 타입을 기반으로 프로토 타입 체인을 상속하고 많은 새로운 작업이 필요합니다. 코드는 충분히 간결하지 않으며, 가독성은 그다지 강하지 않으며, 프로토 타입 체인에 의해 쉽게 오염 될 수 있습니다.
저자가 요약 한 상속 방법은 간결하고 명확합니다. 그것이 가장 좋은 방법은 아니지만 독자들에게 영감을 줄 수 있기를 바랍니다.
좋아요, 말도 안되는 말을하지 말고 코드를보십시오. 의견이 자세히 설명되어 있습니다. 언뜻보기에 이해할 수 있습니다 ~~~
코드 사본은 다음과 같습니다.
/**
* Yang Yuanon에 의해 만들어진 14-11-11.
* 상속을 구현하기 위해 프로토 타입을 사용하지 마십시오
*
*/
/**
* JavaScript 객체 복사, 하나의 레이어 만 복사하고 Universal이 아닌 기능 속성 만 복사하십시오!
* @param obj 객체를 복사합니다
* @returns 객체
*/
object.prototype.clone = function () {
var _s = this,
newobj = {};
_s.Each (함수 (키, 값) {
if (object.prototype.tostring.call (value) === "[Object Function]") {
newobj [key] = value;
}
});
Newobj를 반환합니다.
};
/**
* 모든 자체 속성을 반복하십시오
*
* @param 콜백 콜백 함수. 콜백에는 두 가지 매개 변수가 포함됩니다. 키 속성 이름과 값 속성 값
*/
Object.Prototype.each = function (콜백) {
var key = "",
_this = this;
for (_this의 키) {
if (object.prototype.hasownproperty.call (_this, key)) {
콜백 (key, _this [key]);
}
}
};
/**
* 서브 클래스를 만듭니다
* @param ext obj에는 다시 작성하거나 확장 해야하는 방법이 포함되어 있습니다.
* @returns 객체
*/
Object.Prototype.extend = function (ext) {
var child = this.clone ();
ext.each (함수 (키, 값) {
자식 [키] = 값;
});
귀환 아이;
};
/**
* 개체 생성 (인스턴스)
* @param 인수는 생성자 매개 변수 목록으로 여러 매개 변수를 허용 할 수 있습니다.
* @returns 객체
*/
Object.Prototype.create = function () {
var obj = this.clone ();
if (obj.construct) {
obj.construct.apply (obj, arguments);
}
반환 obj;
};
/**
* 사용 예
*이 방법을 사용하여 지루한 프로토 타입을 피하고 새로 물려 받으십시오.
* 그러나 내가 쓴 예제는 부모 클래스의 기능 만 물려받을 수 있습니다 (회원 방법으로 이해 될 수 있음).
*보다 풍부한 콘텐츠를 상속하려면 클론 방법을 개선하십시오.
*
*
*/
/**
* 동물 (부모)
* @type {{구성 : 구성, 먹기 : Eat}}}
*/
var 동물 = {
구성 : 함수 (이름) {
this.name = 이름;
},
Eat : function () {
Console.log ( "내 이름은"+this.name+"입니다. 먹을 수 있습니다!");
}
};
/**
* 새 (서브 클래스)
* 조류는 부모 클래스 Eat Method를 재정의하고 비행 방법을 확장합니다.
* @type {서브 클래스 | void}
*/
var bird = Animal.extend ({
먹기 : 기능 (음식) {
Console.log ( "내 이름은"+this.name+"입니다."+food+"를 먹을 수 있습니다.
},
플라이 : function () {
console.log ( "나는 날 수 있습니다!");
}
});
/**
* 새 인스턴스를 만듭니다
* @type {Jim}
*/
var birdjim = bird.create ( "Jim"),
birdtom = bird.create ( "Tom");
birdjim.eat ( "웜"); // 제 이름은 Jim입니다. 나는 벌레를 먹을 수있다!
birdjim.fly (); // 나는 날 수 있습니다!
birdtom.eat ( "쌀"); // 제 이름은 Tom입니다. 나는 쌀을 먹을 수있다!
birdtom.fly (); // 나는 날 수 있습니다!