공개 프로토 타이프 패턴을 사용하여 "클래스"를 확장하려고합니다. 예로 저는 동물과 물고기가 있습니다. 여기 공개 프로토 타입 패턴이 다른 공개 프로토 타입 패턴의 범위를 확장 할 수 있습니까?
내가에게 수 있도록하고 싶습니다 내용은 다음과 같습니다 이 물고기 프로토 타입에 새 멤버를 추가 필요한 경우 동물의- 물고기
- "class"와 "class"모두에 대해 공개 프로토 타입 패턴을 사용하면서이 모든 작업 수행
동물 "cla SS "
var Animal = function(data) {
this.name = ""
this.color = "";
this.weight = 0;
};
Animal.prototype = function() {
var eat = function() {
document.write(this.name + " is eating.<br>");
}
return {
constructor: Animal,
eat: eat
};
}();
그리고 나는 물고기 만들 수 있습니다"동물에서 상속 클래스 "나는 문제가 실행 해요 곳
var Fish = function(data) {
this.isSwimming = false;
};
Fish.prototype = new Animal();
물고기의 프로토 타입입니다. Fish에 대한 공개 프로토 타입 패턴을 사용할 수 있습니까? 여전히 Animal의 프로토 타입을 상속하고 필요한 경우 Animal을 재정의 할 수 있습니까? (제 3 자 라이브러리를 사용하는 것에 완전히 반대하지는 않지만 그렇게하지 않는 것이 좋습니다.) 예를 들어, eat()을 재정의하고 수영이라는 Fish에 새 함수를 추가하는 방법은 무엇입니까?
편집 :
다음은 내가 작성한 것입니다. 이것은 내가 필요한 것을하는 것처럼 보입니다. 내가 놓친 게 있니?
Fish.prototype = new function(proto) {
var base = proto.constructor;
var eat = function(data) {
new base().eat (data);//This is just to show you can call the base. If needed.
document.write("fish eating.<br>");
};
var swim = function(){
document.write("fish is swimming.<br>");
};
var thisProto = {
constructor: Fish,
eat: eat,
swim: swim
};
for (var propt in thisProto) {
proto[propt] = thisProto[propt];
}
return proto;
}(new Animal());
편집 : 주요 포인트 중 하나는 새로운 키워드를 사용하지 내가 허용 대답에서
했다. 그래서 나는 새로운 키워드와 Object.create() 사이의 차이점을 연구했다. 내가 올바르게 이해한다면, 둘 다 기본적으로 같은 일을하지만, Object.create()는 new 키워드가 생성되는 동안 객체 생성자를 호출하지 않을 것입니다. 생성자에서 정의 된 무언가를 상속해야하는 경우 new 키워드를 사용하거나 해당 멤버를 프로토 타입으로 이동해야합니다. http://plnkr.co/edit/322WB4jyCJberABbb0P0
가능한 중복 [JS는 프로토 타입 패턴을 공개 상속을 구현하는 방법?] (http://stackoverflow.com/questions/9248655/how-to-implement-inheritance-in-js-revealing -prototype-pattern) – Bergi
@Bergi, 지금 당신의 대답을 테스트하고 있습니다. 나는 어제 다른 답변을 보았지만 그 주위에 내 머리를 잡지 못했습니다. 이제 나는 그것을 보았을 때 더 이해하기 쉽고 중복되었을 수도 있지만 귀하의 대답이 더 많은 정보를 추가한다고 생각합니다. – Jeff