В вашем примере кода слушатель событий ищет события в 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
.
Вы не делаете; метод подкласса переопределяет метод суперкласса, по определению наследования.
Если Вы хотите переопределенный метод быть доступными, выставьте его в подклассе, например.
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
Я спросил бы, почему Вы пытаетесь получить этот тип поведения. Мне кажется, что факт, необходимо вызвать реализацию родительского класса метода, является признаком, что у Вас есть недостаток дизайна где-то в другом месте в системе.
Нижняя строка, хотя, как другие заявили, нет никакого способа вызвать реализацию родительского класса, учитывая путь, Вы структурировали свои классы. Теперь в классе Собаки Вы могли звонить
MyBase.Speak()
который вызвал бы реализацию родительского класса, но снаружи класса Собаки нет никакого способа сделать это.
Я не думаю, что Вы можете.
Вещь состоит в том, что объект является все еще собакой. поведение, которое Вы описываете (получение "ерша" от литого объекта, а не "привет") является стандартным, потому что Вы хотите смочь использовать класс животных, чтобы позволить набору другого типа животных говорить.
Например, если у Вас был третий класс как таким образом:
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
Что Вы говорите о выполнении, в основном повреждает цепочку наследования. Теперь, это может быть сделано путем установки Говорить функции для принятия параметра, который говорит ей возвращаться, это - основное значение или не, или отдельное ГОВОРЯТ функцию за основное значение, но из поля, Вы не собираетесь получать вещи, которые ведут себя этот путь.
Я думаю, отбрасываете ли Вы "Переопределяемый" и изменение "Переопределения" к "Новому", Вы получите то, что Вы хотите.
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"