diff --git a/src/browser/dom/event_target.zig b/src/browser/dom/event_target.zig index 32d7a14ff..ace6ca579 100644 --- a/src/browser/dom/event_target.zig +++ b/src/browser/dom/event_target.zig @@ -95,6 +95,7 @@ pub const EventTarget = struct { // -------- pub fn constructor(page: *Page) !*parser.EventTarget { const et = try page.arena.create(EventTarget); + et.* = .{}; return @ptrCast(&et.base); } diff --git a/src/tests/dom/event_target.html b/src/tests/dom/event_target.html index 68fb8c6b1..e15c0991f 100644 --- a/src/tests/dom/event_target.html +++ b/src/tests/dom/event_target.html @@ -113,4 +113,13 @@ // doesn't crash on null receiver content.addEventListener('he2', null); content.dispatchEvent(new Event('he2')); + + // Test that EventTarget constructor properly initializes vtable + const et = new EventTarget(); + testing.expectEqual('[object EventTarget]', et.toString()); + + let constructorTestCalled = false; + et.addEventListener('test', () => { constructorTestCalled = true; }); + et.dispatchEvent(new Event('test')); + testing.expectEqual(true, constructorTestCalled);