As you can see, beforeSetA is using this.b and beforeSetB is using this.a. One of the meanest possible x-dependencies.

instance.set({a:3, b:4}) will however handle it correctly.

Can I run this test online?

Yes, here: https://neomjs.github.io/pages/node_modules/neo.mjs/test/siesta/index.html#tests/ClassSystem.mjs

Does this concept require using the neo.mjs framework?

No. You can manually enhance the JS class system in the same or a similar way. However, in case you did not take a closer look at the neo.mjs framework yet, I can strongly recommend to do so. You get multi-threading out of the box (the apps you create as well as most parts of the framework run inside a web worker) and the JSON based virtual dom has a lot of benefits (cleaner & simpler code, performance,…). Here is the link: