You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.0 KiB
43 lines
1.0 KiB
// 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); |
|
}; |
|
})();
|
|
|