내가 왜 Boy.prototype = new Human;
을 사용하여 상속을 시뮬레이션하는지 알 수 없습니다. 이봐, 우리가 원하는 건 함수의 권리 야? 우리는 새로운 A를 인스턴스화하지 않고 그것을 할 수 있습니다. (실제로 새로운 A를 인스턴스화하는 것은 우리가 원하지 않는 인스턴스화 함수를 실제로 실행한다는 의미에서 우리에게 바람직하지 않은 결과를줍니다)왜 우리는`Boy.prototype = new Human;`을 사용하여 상속을 시뮬레이트합니까?
더 나은 해결책?
for (var prop_name in Human.prototype) {
Object.defineProperty(
Boy.prototype,
prop_name,
Object.getOwnPropertyDescriptor(Human.prototype,prop_name)
);
}
우리가 특정이며, 우리는 여전히
Object.getOwnPropertyNames
를 사용하여 차례로
Object.getPrototypeOf
을 통해 우리에게 사용할 수있는 프로토 타입 체인에 그것을 호출하여 그것을 달성 할 수 Human.prototype만을 열거 등록되지 싶은 말은.
우리가 더 좋은 옵션을 사용할 수있을 때 Boy.prototype = new Human;
을 수행하면 유익을 얻을 수있는 이점이 정확히 무엇입니까?
'superclass'보다는 오히려 프로토 타입 체인에서'intermediate'라는 이름의 문제가 생깁니다. – Raynos
정말로. 첫째로 'intermediate'라는 이름은 없습니다 (익명 생성자 함수입니다 - 중간은 확장 함수로 범위가 지정됩니다). 프로토 타입 체인에 여분의 객체가 있다는 사실을 고려해 볼 수도 있지만 실제로는 올바른 것으로 간주됩니다. 추가 객체는 하위 클래스 * 클래스 *를 나타냅니다. 그것 없이는, 서브 클래스 클래스를 나타내는 것은 아무것도 없다. 객체 자체는 인스턴스를 나타내며, 객체의 클래스는 프로토 타입 체인에 있어야합니다. – kybernetikos
@ Adam 수퍼 클래스 객체가 체인에 남아있는 것은 맞습니다. 단, 수퍼 클래스와 clazz 사이의 중간을 제외하면됩니다. 이 패턴은 작은 체인에만 유용합니다. 이 패턴을 사용하여 4 번 체인하면 프로토 타입 체인에 8 개의 객체가 있습니다. 이렇게하면 탐색 시간이 크게 늘어나고 코드가 느려집니다. – Raynos