关于js继承的想法笔记

教程中论述继承

一、 旧方式javascript

function animal(){}
  animal.prototype = { 
        getname(){ } 
  }
  function cat(){}
  cat.prototype = new animal();
复制代码

二、新方式java

function animal(){}
  animal.prototype = { 
        getname(){ } 
  }
  function cat(){}
  cat.prototype = Object.create(new animal());
复制代码

可是只能继承一次,若是要是多继承呢?个人想法是使用Object.assign,可是assign没法执行深复制!若是使用getOwnPropertyDescriptors配合Object.assign能够实现多继承bash

function arm (){this.name="arm"}; arm.prototype={ getname(){}} 
function leg (){this.name="leg"}; arm.prototype={setname(){}}
let base = {}
Object.assign(
    //在原型获取其属性解构
    {...Object.getOwnPropertyDescriptors(arm).prototype.value},
    {...Object.getOwnPropertyDescriptors(leg).prototype.value},
    //利用Object.getOwnPropertyDescriptors没法获取实例的__proto__的特性获取构造函数内this指向参数
    {...Object.getOwnPropertyDescriptors(new arm())}, 
    {...Object.getOwnPropertyDescriptors(new leg())}
)
//继承
function newFun(){}
newFun.prototype = base;
new newFun();//
复制代码

这种多重的继承最大的问题是出现重复函数名会被覆盖,并且若是作好多重继承应该给出错误提示阻止其继承,函数

相关文章
相关标签/搜索