js中继承的个人总结

自定义继承:

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

  如何: 3种:

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

     Object.setPrototypeOf(child,father)

       修改child对象的__proto__,继承father

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

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

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

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

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

             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的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值