저는 3개의 확장 가능한 클래스로 구성된 상속 체인을 작업 중입니다.
Renderer(기본) -> Mailbox(하위) -> MailboxInbox(최종 하위)
각각 자신만의 render
方法。孩子只是重写渲染器(基础)render
方法最后他们无论如何应该使用渲染器的render
method(Base< /strong>) 클래스가 있습니다. 내 문제는 Renderer 클래스(createElementWithTextInside)에서 특정 메서드를 실행할 때 Renderer의 render 메서드(Renderer .render())를 정확하게 실행하지 않지만 확장 가능한 클래스 Starts에서 실행한다는 것입니다. 체인의 끝에서. 예를 들어 다음과 같이 탐색이 시작됩니다.
1 - MailboxInbox.render
2 - Mailbox.render
3 - Renderer.render
JS 클래스/상속이 뒤에서 어떻게 작동하는지 이해합니다. Javascript는 객체 프로토타입을 확장하고 스크립트는 이를 반복합니다. 하지만 내 질문은 이 동작을 방지하고 필요할 때 해당 메서드에서 Renderer.render 메서드를 직접 호출할 수 있는 방법입니다.
어쨌든 현재 인스턴스(MailboxInbox)의 를 가리키기 때문에 renderer에 __selfthis
를 저장할 수 없습니다. 또한 .bind/lambda(화살표 기능) 를 사용할 수 없습니다. 왜냐하면 컨텍스트를 저장해야 하기 때문입니다
바이올린
으아악여기에서는 콘솔에서 렌더링됩니다.
1: 받은편지함 렌더링
2: 메일박스 렌더링
3: 렌더러 렌더링
도와주셔서 감사합니다! 감사합니다!
업데이트
기본적으로 매개변수를 허용할 수 있는 기본 render
클래스가 필요합니다: (el,content)
(콘텐츠는 선택 사항) 및 render
类,它可以接受参数:(el,content)
(内容是可选的)和Children我想用一些预定义的 el
和 content
等在他们自己的 .render()
方法中覆盖它,但是如果我尝试执行 renderer.render()
方法来自 Renderer 内部,它遍历整个链,我的参数丢失了,因为在 MailboxInbox 中,渲染方法当前没有'不接受任何参数,所以我要么应该让它接受参数并将它们传递到整个链,要么只是在 Renderer 中定义一些专用类,如 baseRender
Children< /p> 미리 정의된 일부 < code>el 및 content
등은 자체 .render()
메서드에서 이를 재정의하지만 renderer.render()를 실행하려고 하면
메소드는 🎜Renderer🎜 내부에서 나오며 전체 체인을 통과하는데 매개변수가 누락되었습니다. 🎜MailboxInbox🎜에서 렌더링 메소드가 현재 어떤 매개변수도 허용하지 않기 때문에 매개변수를 수락하고 전달해야 합니다. 체인 전체에 걸쳐 또는 🎜Renderer🎜에서 baseRender
와 같은 전용 클래스를 정의하고 직접 호출하세요 🎜
기술적으로는
로 바꿀 수 있습니다. 으아악this.render(el, text);
를상속된 속성 조회를 우회합니다. 그러나 이는 일반적으로 좋은 습관이 아니며 상속의 이점을 잃게 됩니다.
다행히도 업데이트에서 실제 문제를 확인했습니다.class
리히터 대체 원칙을 위반합니다.
잠재적인 솔루션도 확인했습니다.로 지정하지 않는 것이 좋습니다.
render
和baseRender
,而是推荐类似renderContent(el, content)
和renderDefault (el)
,它们的签名实际上不同 - 并且都可以被覆盖。然而,看看使用两个参数调用时render
的实现,在我看来,除了调用el.appendChild(content)
之外,它实际上没有做任何有用的事情,所以我'宁愿完全放弃它并只调用appendChild
(除非您需要覆盖具体行为的能力,例如通过执行el.prepend(content)