1. 基于一个对象去创建新的对象
1 var person = { 2 isHuman: false, 3 print: function() { 4 console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`); 5 }, 6 }; 7 8 const me = Object.create(person); 9 10 // 'name'是 me 的自有属性(非person对象的) 11 me.name = 'John'; 12 // 继承自person上的isHuman属性将被改写 13 me.isHuman = true; 14 15 me.print();
2. 实现继承
1 // 父类 - Shape 2 function Shape() { 3 this.x = 0; 4 this.y = 0; 5 } 6 7 Shape.prototype.move = function(x, y) { 8 this.x += x; 9 this.y += y; 10 }; 11 12 // 子类 - Rectangle 13 function Rectangle() { 14 Shape.call(this); 15 } 16 17 // 继承 18 Rectangle.prototype = Object.create(Shape.prototype); 19 Rectangle.prototype.constructor = Rectangle; 20 21 var rect = new Rectangle();
3. 方法使用细节
1 var o; 2 // 创建一个原型为null的空对象 3 o = Object.create(null); 4 5 // 以字面量创建的空对象 o = {} 相当于: 6 o = Object.create(Object.prototype); 7 8 // 关于Object.create的 propertyObject 参数的使用 9 o = Object.create(Object.prototype, { 10 // 添加数据属性 11 foo: { 12 writable: true, 13 configurable: true, 14 value: 'hello', 15 }, 16 // 添加存取器属性 17 bar: { 18 configurable: false, 19 get: function() { 20 return 10; 21 }, 22 set: function(val) { 23 console.log('Set "o.bar" to ', val); 24 }, 25 }, 26 }); 27 28 // function Cons() {} 29 // var c = new Cons(); 30 // // 等同于: 31 // var o = Object.create(Cons.prototype);