44 lines
1 KiB
JavaScript
44 lines
1 KiB
JavaScript
|
// Workaround for http://code.google.com/p/v8/issues/detail?id=2804
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
var create = Object.create, shim;
|
||
|
|
||
|
if (!require("./set-prototype-of/is-implemented")()) {
|
||
|
shim = require("./set-prototype-of/shim");
|
||
|
}
|
||
|
|
||
|
module.exports = (function () {
|
||
|
var nullObject, polyProps, desc;
|
||
|
if (!shim) return create;
|
||
|
if (shim.level !== 1) return create;
|
||
|
|
||
|
nullObject = {};
|
||
|
polyProps = {};
|
||
|
desc = { configurable: false, enumerable: false, writable: true, value: undefined };
|
||
|
Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
|
||
|
if (name === "__proto__") {
|
||
|
polyProps[name] = {
|
||
|
configurable: true,
|
||
|
enumerable: false,
|
||
|
writable: true,
|
||
|
value: undefined
|
||
|
};
|
||
|
return;
|
||
|
}
|
||
|
polyProps[name] = desc;
|
||
|
});
|
||
|
Object.defineProperties(nullObject, polyProps);
|
||
|
|
||
|
Object.defineProperty(shim, "nullPolyfill", {
|
||
|
configurable: false,
|
||
|
enumerable: false,
|
||
|
writable: false,
|
||
|
value: nullObject
|
||
|
});
|
||
|
|
||
|
return function (prototype, props) {
|
||
|
return create(prototype === null ? nullObject : prototype, props);
|
||
|
};
|
||
|
})();
|