Blame view

node_modules/es5-ext/object/create.js 1.03 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  // 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);
  	};
  }());