js中继承的个人总结

自定义继承:

  何时: 只要默认的父对象不是想要的,就可更换

  如何: 3种:

   1. 修改一个对象的原型对象:

     Object.setPrototypeOf(child,father)

       修改child对象的__proto__,继承father

   2. 批量修改所有子对象的父对象

     只要修改构造函数的prototype=新父对象

     强调: 必须在创建第一个新子对象之前,就修改。

   3. 用一个已有的父对象作为参照,创建一个新子对象,同时,扩展子对象自有属性。

(ES5中最新提出的,本身不是继承的方法,是创建对象的方法)

扫描二维码关注公众号,回复: 2488089 查看本文章

             var son=Object.create(父对象);

              这句话做了2件事: 1. 创建空对象son

                                    2. 设置son的__proto__指向父对象

              var son=Object.create(父对象,{

扩展属性名1:{

              writable:true,//是否可修改,可以省略

              value:属性值,

              configurable:true//可以设置,可以省略

},

                     扩展属性名2:{...}

              });

           何时使用:在创建一个子对象时,希望随意扩展子对象的自有属性时

   4. 两种类型间的继承: 继承与扩展

     何时: 只要两种类型间存在部分相同的属性结构和部分相同的方法

     如何: 2步:

      1. 抽象一个父类型:

          定义父类型构造函数,集中定义两种类型间相同的属性结构

          定义父类型原型对象,集中定义两种类型间相同的方法

      2. 让子类型继承父类型:

          让子类型原型对象继承父类型原型对象:

      Object.setPrototypeOf(子类型.prototype, 父类型.prototype)

          在子类型构造函数中借用父类型构造函数

          如何借用:

 错误做法: 父类型构造函数()

 问题: 一个函数,不用new或.调用时,this->window

    导致父类型构造函数中的属性都创建到全局window中

             解决: 只要函数中this不是想要的,都可用call强行替换

             正确做法: 父类型构造函数.call(obj,其他参数...)

                其中obj是要替换this的对象

猜你喜欢

转载自blog.csdn.net/margin_0px/article/details/81287470
今日推荐