mirror of https://github.com/lukechilds/node.git
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.
36 lines
1004 B
36 lines
1004 B
// 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, props, desc;
|
|
if (!shim) return create;
|
|
if (shim.level !== 1) return create;
|
|
|
|
nullObject = {};
|
|
props = {};
|
|
desc = { configurable: false, enumerable: false, writable: true,
|
|
value: undefined };
|
|
Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
|
|
if (name === '__proto__') {
|
|
props[name] = { configurable: true, enumerable: false, writable: true,
|
|
value: undefined };
|
|
return;
|
|
}
|
|
props[name] = desc;
|
|
});
|
|
Object.defineProperties(nullObject, props);
|
|
|
|
Object.defineProperty(shim, 'nullPolyfill', { configurable: false,
|
|
enumerable: false, writable: false, value: nullObject });
|
|
|
|
return function (prototype, props) {
|
|
return create((prototype === null) ? nullObject : prototype, props);
|
|
};
|
|
}());
|
|
|