UpgradedMutationObserver class
Implements isConnected method (object composition style with private property and method wrapper)
by SSRRDD
HTML
<div>
</div>
JavaScript
// to keep actual working methods of the class out of the object's instance whenever possible
// is a good practice, but since ECMAScript2015 (ES2015, ES6) does not support private methods
// (though does support private variables with "var" in constructors), IIFE (Immediately-invoked
// function expression) has to be used to encapsulate, isolate the full class definition:
let UpgradedMutationObserver = (function()
{
// private variable/property to store the instance's current status; WeakMap is used to improve memory
// management as it sheds its value pairs as soon as the instance is not reference any more:
const _targetsArrayWeakMap = new WeakMap(), // new WeakMap([[this, []]]) would not work as "this" here is a window object
// private method-function wrapper that provides access for the object's instance to class prototype
// methods as well as to an earlier-declared private variable;
// this wrapper is designed as a function factory as it returns functions that get assigned to the object
// instance's public methods:
_callPrototypeMethod = function(prototypeMethod, instance, args)
{
// actual type of the private variable/property is set here; runs only once:
if (typeof _targetsArrayWeakMap.get(instance) === 'undefined')
{
_targetsArrayWeakMap.set(instance, []);
}
return function()
{
const returnedObject = Object.getPrototypeOf(instance)[prototypeMethod](instance, _targetsArrayWeakMap.get(instance), ...arguments);
_targetsArrayWeakMap.set(instance, returnedObject.privateVariable);
return returnedObject.returnValue;
}
};
class UpgradedMutationObserver
{
constructor(callback)
{
// an arrow function version of the way to attach the object's instance would not need .bind(this)
// as there is no own "this" in arrow functions, "this" would mean the instance of the...