JSFiddle - React, Tailwind, and code Playground

CSS

using System;
namespace wildert
{
    public class Metronome
    {
        public event TickHandler Tick;
        public EventArgs e = null;
        public delegate void TickHandler(Metronome m, EventArgs e);
        public void Start()
        {
            while (true)
            {
                System.Threading.Thread.Sleep(3000);
                if (Tick != null)
                {
                    Tick(this, e);
                }
            }
        }
    }
        public class Listener
        {
            public void Subscribe(Metronome m)
            {
                m.Tick += new Metronome.TickHandler(HeardIt);
            }
            private void HeardIt(Metronome m, EventArgs e)
            {
                System.Console.WriteLine("HEARD IT");
            }

        }
    class Test
    {
        static void Main()
        {
            Metronome m = new Metronome();
            Listener l = new Listener();
            l.Subscribe(m);
            m.Start();
        }
    }
}

JavaScript

class Button{
	constructor() {
    	this.callbacks = [];
    }
    
	addListener(callback, ctx) {
    	this.callbacks.push([callback, ctx]);
    }
    
    click() {
    	this.callbacks.forEach(([callback, ctx]) => {
        	callback.call(ctx, 1, 2, 3);
        });
    }
}

let button = new Button();

class Person{
	constructor() {
    	this.age = 1;
        button.addListener(this.incAge, this);
    }
    
    incAge() {
    	this.age++;
    }
}

let a = new Person();
let b = new Person();

button.click();

console.log(a.age);