Create a gist now

Instantly share code, notes, and snippets.

@nbubna /define.js
Last active Dec 20, 2015

A paranoid function for defining properties on an object such that they will never override existing ones, never error, never interrupt the current thread, and never allow subsequent definitions of the property. (requires ES5)
function define(object, key, fn, force) {
if (force || !(key in object)) {// unless we're forcing the issue, avoid already defined keys
(setImmediate || setTimeout)(function() {// do it asynchronously to not interrupt other initialization
try {// suppress errors when the property isn't configurable
Object.defineProperty(object, key, { value: fn });// define the new one to be non-enumerable and non-configurable
} catch (e) {}
}, 0);
// if you really want to get fancy, you could use promises or callbacks to resume init after this is defined.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment