2012-11-18 7 views
1

문제가 있습니다. 상당히 큰 JavaScript 프로젝트를 작성 중이며 OOP를 사용하는 방법을 배우고 있습니다. JS에서 이상하게 보입니다. 확신합니다.JavaScript 함수 상속 작업 방법 바로 만들기

그래서 여기에 내가하려고하는 것이 있습니다. 나는베이스 '클래스'를 가지고 있는데, 바로 AbstractAnimal입니다. Animals이라는 또 다른 클래스가 있습니다. Animals 클래스의 내부에는 Man, MonkeyElephant이라는 세 그룹이 있습니다. 나는 그 그룹들 각각이 AbstractAnimal을 상속 받기를 원하지만 그들 고유의 기능이되도록하고 AbstractAnimal에 연결하지 않기를 바란다.

나는 원래 이런 식으로 그 일을했다 :

Animals.prototype.Man = AbstractAnimal; 
Animals.prototype.Monkey = AbstractAnimal; //etc... 

을하지만, 슬프게도, 나는 그것이해야 할 일을하지 않습니다. 그 이유는 다음과 같습니다.

AbstractAnimal.prototype.clicked = function() { console.log("clicked") }; 
//If I change Man... 
animals.Man.clicked = function() { console.log("HA!"); }; 
//Monkey is effected too... 
animals.Monkey.clicked(); 
//Console: "HA!" 

위의 예에서 원숭이를 클릭하면 콘솔에 "딸깍"소리가 들리게됩니다. 사람이 클릭되면 "HA!"라고 말합니다. 하지만 확실히, javascript class inherit from Function class

그리고 그것은 거의 일 :

그래서 나는 여기 이상 할 것이라고 생각 뭔가를 발견했다. 테스트 케이스가 줄어 들었습니다. http://jsfiddle.net/9KRJk/2/

도와 주실 수 있습니까? 감사!

P. 사실, 동물 전체가 은유 적이기 때문에 실제로 동물원을 프로그래밍하지는 않습니다. : 나는 확실히 당신의 문제를 이해한다면

답변

5

모르겠지만, 몇 가지 개념을 어쩌면 당신은 너무 많은 일을 복잡하게하고 아니면 누락하고 있지만 프로토 타입 체인은 다음과 같이 나타낼 수있다

// Extends helper 
Function.prototype.extends = function(parent) { 
    this.prototype = Object.create(parent.prototype); 
}; 

function Animal() {} 
Animal.prototype = { 
    clicked: function() { 
    console.log('animal'); 
    } 
}; 

function Man() {} 
Man.extends(Animal); 
Man.prototype.clicked = function() { 
    console.log('man'); 
}; 

function Monkey() {} 
Monkey.extends(Animal); 
Monkey.prototype.clicked = function() { 
    console.log('monkey'); 
}; 

var animal = new Animal(); 
animal.clicked(); //=> 'animal' 

var man = new Man(); 
man.clicked(); //=> 'man' 

var monkey = new Monkey(); 
monkey.clicked(); //=> 'monkey' 
+0

안녕하세요, 감사합니다. 그건 내가 필요로하는 것이 아니었지만, 내가 필요한 방향을 내게 주었다. 그리고 내 코드는 이제 조금 깔끔해졌습니다! 미래의 사람들을 위해 이것은 또한 내가 대답을 찾도록 도왔다 : http://www.bennadel.com/blog/2184-Object-create-Improves-Constructor-Based-Inheritance-In-Javascript-It-Doesn-t-Replace- It.htm –