JSFiddle - React, Tailwind, and code Playground

by Dygerati

JavaScript

(function(global, undefined){

	global.spyWhenCreated = function(functionPath) {
		var props = functionPath.split('.'),
			objectName = props.shift(),
			obj = this[objectName] || global[objectName];

		if(obj) {

			for (var i = 0; i < props.length; i++) {

				if(!obj.hasOwnProperty(props[i])) {

					console.log(props[i], " not present. Observing...");

					Object.observe(obj, function(changes) {
						debugger;
						changes.forEach(function(change) {

							if(change.name === props[i]) {
								window.spyWhenCreated(functionPath);
							}

						});

					}, ['add']);

					return;

				} else if(i === (props.length-1)) {	
					var functionToSpy = obj[props[i]];
					
					obj[props[i]] = function(){
						console.log('before function call');
						return functionToSpy.apply(obj, arguments);
					};

					return;

				} else {
					obj = obj[props[i]];
				}

			}

		}
	};

})(window);
window.nike = {};
spyWhenCreated("nike.analytics.providers.TagUtilType.prototype.getParamValue");