От Дочернего метода базового класса вызова экземпляра, который был переопределен

В вашем примере кода слушатель событий ищет события в SPAN,

todoBodyEl.addEventListener("click", (event) => {
    if (event.target.tagName === "SPAN") {
      let li = event.target.parentNode;
      let ul = li.parentNode;
      ul.removeChild(li);
    }
  });

, но при создании нового элемента вы добавляете кнопку.

function createDeleteX(todoItemEls) {
    const newDeleteX = document.createElement("button");
    //...
}

Изменение кнопки на диапазон (и раскомментирование и вызов) устраняет проблему. Смотрите обновленный код: https://codepen.io/anon/pen/vvqjQd?editors=0010

.

8
задан MattH 28 October 2008 в 21:12
поделиться

4 ответа

Вы не делаете; метод подкласса переопределяет метод суперкласса, по определению наследования.

Если Вы хотите переопределенный метод быть доступными, выставьте его в подклассе, например.

Public Class Dog 
    Inherits Animal
    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function
    Public Function SpeakAsAnimal() As String
        Return MyBase.Speak()
    End Function
End Class
12
ответ дан 5 December 2019 в 13:02
поделиться

Я спросил бы, почему Вы пытаетесь получить этот тип поведения. Мне кажется, что факт, необходимо вызвать реализацию родительского класса метода, является признаком, что у Вас есть недостаток дизайна где-то в другом месте в системе.

Нижняя строка, хотя, как другие заявили, нет никакого способа вызвать реализацию родительского класса, учитывая путь, Вы структурировали свои классы. Теперь в классе Собаки Вы могли звонить

MyBase.Speak()

который вызвал бы реализацию родительского класса, но снаружи класса Собаки нет никакого способа сделать это.

1
ответ дан 5 December 2019 в 13:02
поделиться

Я не думаю, что Вы можете.

Вещь состоит в том, что объект является все еще собакой. поведение, которое Вы описываете (получение "ерша" от литого объекта, а не "привет") является стандартным, потому что Вы хотите смочь использовать класс животных, чтобы позволить набору другого типа животных говорить.

Например, если у Вас был третий класс как таким образом:

Public Class Cat
    Inherits Animal

    Public Overrides Function Speak() As String
        Return "Meow"
    End Function
End Class

Затем Вы смогли бы получить доступ к ним как таким образом:

protected sub Something
    Dim oCat as New Cat
    Dim oDog as New Dog

    MakeSpeak(oCat)
    MakeSpeak(oDog)
End sub

protected sub MakeSpeak(ani as animal)
    Console.WriteLine(ani.Speak())
end sub 

Что Вы говорите о выполнении, в основном повреждает цепочку наследования. Теперь, это может быть сделано путем установки Говорить функции для принятия параметра, который говорит ей возвращаться, это - основное значение или не, или отдельное ГОВОРЯТ функцию за основное значение, но из поля, Вы не собираетесь получать вещи, которые ведут себя этот путь.

0
ответ дан 5 December 2019 в 13:02
поделиться

Я думаю, отбрасываете ли Вы "Переопределяемый" и изменение "Переопределения" к "Новому", Вы получите то, что Вы хотите.

Public Class Animal

Public Function Speak() As String
    Return "Hello"
End Function

End Class

Public Class Dog
    Inherits Animal

    Public New Function Speak() As String
        Return "Ruff"
    End Function

End Class

Dim dog As New Dog
Dim animal As Animal
dog.Speak() ' should be "Ruff"
animal = CType(dog, Animal)
animal.Speak() ' should be "Hello"
0
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: