Skip to content

Instantly share code, notes, and snippets.

@javascripter
Created September 25, 2009 10:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javascripter/193448 to your computer and use it in GitHub Desktop.
Save javascripter/193448 to your computer and use it in GitHub Desktop.
(function () {
function define(owner, prop, value) {
if (typeof owner[prop] !== "function") {
owner[prop] = value;
}
}
define(Object, "keys", function (object) {
var k,
result = [];
for (k in object) {
if (Object.prototype.hasOwnProperty.call(object, k))
result.push(k);
}
return result;
});
define(Object, "getOwnPropertyDescriptor", function (object, property) {
var desc = {},
k,
tmp = object[property],
id = {},
getter = Object.prototype.__lookupGetter__.call(object, property),
setter = Object.prototype.__lookupGetter__.call(object, property);
desc.enumerable = Object.keys(object).indexOf(property) >= 0;
if (getter || setter) {
desc.getter = getter;
desc.setter = setter;
} else {
desc.value = tmp;
}
try {
object[property] = id;
if (object[property] === id)
desc.writable = true;
} catch (ex) {
desc.writable = false;
} finally {
try {
object[property] = tmp;
} catch (ex) {
}
}
try {
delete object[property];
desc.configurable = !(property in object);
} catch (ex) {
desc.configurable = false;
} finally {
try {
object[property] = tmp;
} catch (ex) {
}
}
return desc;
});
define(Object, "getPrototypeOf", function (object) {
return object.__proto__;
});
define(Array, "isArray", function (object) {
return Object.prototype.toString.call(object) == "[object Array]";
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment