Object.create()实现继承

说明

Object.create() 方法可以创建对象。

第一个参数是为即将创建好的对象指定原型,
第二个参数是一个对象,同Object.defineProperties()的第二个参数一样。

区别

同样是创建对象关于{} 与 new Object() 与 Object.create() 三者之间的区别,我查了不少博客后我所理解的区别:

当Object.create()的第一个参数为null时 不会继承Object的原型链上的属性 可以自己打印看看是空的{}。

new Object() 和 {} 是完全一样的。

使用

var Obj ={
  name:'mini',
  age:3,
  show:function () {
    console.log(this.name +" is " +this.age);
  }
}

// 上面的Obj对象就是下面MyObj的原型

var MyObj = Object.create(Obj,{ 
  like:{
    value:"fish",   // 初始化赋值
    writable:true,   // 是否是可改写的
    configurable:true, // 是否能够删除,是否能够被修改
    enumerable:true    //是否可以用for in 进行枚举
  },
  hate:{
    configurable:true,
    get:function () { console.log(111);  return "mouse" },  // 获取对象hate属性时触发的方法
    set:function (value) {  // 设置对象hate属性时触发的方法 
      console.log(value,2222);
      return value;
    }    
  }
});

继承

在讲解Object.create方法在构造函数上的应用之前我们先来回顾构造函数的继承

var Animal=function () {}
Animal.prototype.show=function () {
  console.log("animal");
}
var Dog = function () { }
var subClass = function () {}
subClass.prototype = Animal.prototype;
Dog.prototype = new subClass(); // 继承Animal 

以上代码是我们实现继承最常用的一种方式,这种方式是借助于一个代理函数,通过继承构造函数的实例来继承构造函数上的属性 。

通过Object.create方法继承

var A = function () { };
A.prototype.sayName=function () {
  console.log('a');
}

// B的实例继承了A的属性
var B = function () { };
B.prototype = Object.create(A.prototype);
var b = new B();
b.sayName();  // a
原文地址:https://www.cnblogs.com/gr07/p/8059240.html