저는 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
와 같은 전용 클래스를 정의하고 직접 호출하세요 🎜
P粉6183582602024-01-11 12:38:30
기술적으로는 this.render(el, text);
를
상속된 속성 조회를 우회합니다. 그러나 이는 일반적으로 좋은 습관이 아니며 상속의 이점을 잃게 됩니다. class
이것은 호환되지 않는 서명이 있는 메서드를 잘못 재정의하여
리히터 대체 원칙을 위반합니다.
잠재적인 솔루션도 확인했습니다.둘 다 좋아요. 후자의 경우 대신 메서드 이름을
로 지정하지 않는 것이 좋습니다. render
和 baseRender
,而是推荐类似 renderContent(el, content)
和 renderDefault (el)
,它们的签名实际上不同 - 并且都可以被覆盖。然而,看看使用两个参数调用时 render
的实现,在我看来,除了调用 el.appendChild(content)
之外,它实际上没有做任何有用的事情,所以我'宁愿完全放弃它并只调用 appendChild
(除非您需要覆盖具体行为的能力,例如通过执行 el.prepend(content)