• 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
  • 相关阅读:
    机器学习-分类简单介绍
    状态压缩动态规划 -- 旅行商问题
    30 天学习 30 种新技术系列
    Sublime Text3 高亮显示Jade语法 (Windows 环境)
    程序启动缓慢-原来是hbm.xml doctype的原因
    Spring4 Hibernate4 Struts2在WebLogic 10.3.3上面部署
    Spring的 classpath 通配符加载配置文件
    nmp install 异常
    cvc-complex-type.2.4.c: The matching wildcard...
    LazyInitializationException--由于session关闭引发的异常
  • 原文地址:https://www.cnblogs.com/gr07/p/8059240.html
Copyright © 2020-2023  润新知