2017-05-09 3 views
1

new 및 ES6 클래스 대신 JavaScript에서 여러 가지 객체 생성 방법을 읽었습니다.팩토리 메서드/클래스 패턴을 사용한 상속

const dog =() => { 
    const sound = 'woof' 
    return { 
    talk:() => console.log(sound) 
    } 
} 
const sniffles = dog() 
sniffles.talk() // Outputs: "woof" 

가 어떻게 Animal 같은 클래스를 구현하는 것 또는 오히려 내 강아지 기능에서 "상속"할 수있는 또 다른 공장의 연료 소모량 : 한 가지 방법은 팩토리 메소드/팩토리 클래스 (https://medium.com/humans-create-software/factory-functions-in-javascript-video-d38e49802555에서 가져온) 패턴을 사용한다? 동물 객체를 개 함수에 전달하고 전달 된 객체에 반환되는 객체의 프로토 타입을 설정하겠습니까?

+1

정확하게 달성하기 위해 노력하고있는 것은 무엇입니까? 상속이 필요하지 않을 수도 있습니다. – nils

+0

그냥 사용하십시오 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/extends –

+0

일반적으로 물어 보지만 예를 들어 Animal 클래스는 모든 하위 클래스가 수행하는 동작을 구현할 수 있습니다. 구현하고 싶다. 또는 일부 하위 클래스에서 덮어 쓸 move()와 같은 메서드입니다. – eol

답변

3

에게 : 당신을 의미하는 것입니다 Object.create을 사용합니다 :

const animal =() => ({ 
 
    talk: function() { 
 
    console.log(this.sound); 
 
    } 
 
}); 
 

 
const dog =() => Object.create(animal(), { 
 
    sound: { 
 
    value: "woof" 
 
    } 
 
}); 
 

 
// or... 
 

 
const dog2 =() => { 
 
    var someDog = Object.create(animal()); 
 
    someDog.sound = "woof"; 
 

 
    return someDog; 
 
}; 
 

 
var someDog = dog(); 
 
someDog.talk(); 
 

 
var someDog2 = dog2(); 
 
someDog2.talk();

은 BTW, 내 의견은 당신이 정말로 그들을 필요로하는 곳에 당신이 ES2015 + 클래스/상속으로 가서 사용자 정의 공장과 코너 케이스에 대한 Object.create의 사용을두고해야한다는 것입니다 : 또한

class Animal { 
 
    talk() { 
 
    return console.log(this.sound); 
 
    } 
 
} 
 

 
class Dog extends Animal { 
 
    constructor() { 
 
    super(); 
 
    this.sound = "woof"; 
 
    } 
 
} 
 

 
var dog = new Dog(); 
 
dog.talk();

+0

고마워요, 그게 무슨 뜻인가요? :) – eol

+0

@eol 문제 없습니다! ;) –

1

@nils은 무엇을/당신이 상속 할 이유는 분명하지 않다, 바로, 그래서 난 그냥 추측하고있어,하지만 어쩌면 이것은 당신이

const animal = (sound) => { 
 
    return { 
 
    talk:() => console.log(sound) 
 
    } 
 
} 
 
const dog =() => animal('woof') 
 
const sniffles = dog() 
 
sniffles.talk() // Outputs: "woof"

+0

가능한 접근 방법입니다. –

0

이러한 다른 답변에 대해서는 자바 디자인 패턴 인 Learning JavaScript Design Patterns에 대한 훌륭한 책을 살펴 보는 것이 좋습니다.

특히 factories에 대한 장을 살펴보십시오.

팩토리 패턴에서 상속을 달성하기 위해 원래 팩토리 클래스는 구성 객체를 허용합니다. 보다 구체적인 팩토리는 객체를 전달하여 원래의 팩토리 클래스를 확장합니다.

관련 문제