2

JavaScript에서 다중 상속을 구현하는 방법을 살펴 보겠습니다. 나는이 주제에 대해 많은 책을 읽었으며 몇 가지 접근 방식이 있다는 것을 알고 있습니다. 각각의 장점과 약점이 있지만, 적어도 내가 이해할 수있는 언어가 아닌 Object.create()에 대한 철저한 분석을 발견하지 못했습니다. 몇 가지 실험을 해본 결과 Object.create() (아래 JSFiddle 참조)을 사용하여 다중 상속을 실제로 달성하는 접근법을 생각해 냈습니다. 상기 바이올린에 Object.create()를 사용하여 다중 상속 달성

https://jsfiddle.net/etymhecv/

p 변수 e 변수 ( Person 상속) 및 ae 독립형 클래스 Alien 모두로부터 상속 (AN AlienEmployeeEmployee이고로부터하는 PersonEmployee (따라서 Person)). Person.isPerson(ae) 테스트에서 AlienEmployeePerson 유형임을 올바르게 감지합니다.

위의 방법을 사용하면 어떤 단점이있을 수 있습니까?

+0

* 잡히지 않은 TypeError : Object.getOwnPropertyDescriptors가 함수가 아닙니다 *. 기묘한. – Marcus

+0

@Marcus, Chrome에서 저에게 적합합니다. – magnus

답변

3

I have come up with an approach that truly does achieve multiple inheritance

아니는 :

> var ae = AlienEmployee.create("Zeuss", "4321", "Marsodian") 
| AlienEmployee.isAlienEmployee(p) 
< true 
> Alien.isAlien(p) 
< false 

여러 프로토 타입 상속은 자바 스크립트에서 가능하지 않다, 프로토 타입 체인은 항상 선형 적이다.

귀하의 create 방법은 성공적으로 (Object.create/defineProperties(…, Object.getOwnPropertyDescriptors(…)) 또는 extend/Object.assign와 중)이 믹스 인 패턴을 사용,하지만 그건 정말 우리가 Object.create에서 알려진 한 동적 상속이 아니다.

+0

아, 네가 맞아! 객체의'prototype'은 단지 하나의 객체가 아니라 객체의 배열이 될 수 없다는 것은 수치 스럽습니다. – magnus

+0

@ user1420752 : 당신은 틀린 언어를 선택했습니다 :-) 당신은 ES6 프록시와 같은 것을 구현할 수 있다고 생각합니다. – Bergi