Object.create(proto[, propertiesObject])
The Object.create() method creates a new object with the specified prototype object and properties.第1个参数是该对象的 prototype, 第2个参数和 Object.defineProperties 第2个参数类似
var o;// create an object with null as prototypeo = Object.create(null);o = {};// is equivalent to:o = Object.create(Object.prototype);function Constructor() {}o = new Constructor();// is equivalent to:o = Object.create(Constructor.prototype);// Of course, if there is actual initialization code// in the Constructor function, // the Object.create() cannot reflect it// Example where we create an object with a couple of// sample properties. (Note that the second parameter// maps keys to *property descriptors*.)o = Object.create(Object.prototype, { // foo is a regular 'value property' foo: { writable: true, configurable: true, value: 'hello' }, // bar is a getter-and-setter (accessor) property bar: { configurable: false, get: function() { return 10; }, set: function(value) { console.log('Setting `o.bar` to', value); }/* with ES5 Accessors our code can look like this get function() { return 10; }, set function(value) { console.log('Setting `o.bar` to', value); } */ }});// Create a new object whose prototype is a new, empty// object and add a single property 'p', with value 42.o = Object.create({}, { p: { value: 42 } });// by default properties ARE NOT writable,// enumerable or configurable:o.p = 24;o.p;// 42o.q = 12;for (var prop in o) { console.log(prop);}// 'q'delete o.p;// false// to specify an ES3 propertyo2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true }});
Polyfill
if (typeof Object.create != 'function') { Object.create = (function(undefined) { var Temp = function() {}; return function (prototype, propertiesObject) { if(prototype !== Object(prototype)) { throw TypeError( 'Argument must be an object, or null' ); } Temp.prototype = prototype || {}; var result = new Temp(); Temp.prototype = null; if (propertiesObject !== undefined) { Object.defineProperties(result, propertiesObject); } // to imitate the case of Object.create(null) if(prototype === null) { result.__proto__ = null; } return result; }; })();}
参考地址: