js继承es5、es6的7种方式

构造函数、原型对象

1.构造函数

function A(name) {
 this.name = name;
 this.arr = [1];
 this.say = function(){
   console.log('hi')
 }
}

注意:

  • 数组和方法都属于”实例引用属性“,但是数组强调私有、不共享的。方法需要复用、共享;
  • 在构造函数中,一般很少有数组形式的引用属性,大部分情况都是:基本属性+方法。

2.原型链

每个实例对象(Object)都有一个私有属性(称之为__proto__)指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(proto,层层向上知道一个对象的原型对象为null。根据定义,null没有原型,并作为这个原型链中的最后一个环节。

继承分类

在这里插入图片描述

继承方法 继承核心代码 优点 缺点
原型链继承 child.prototype = new parent() 父类方法可以复用 不可以传参, 实例的引用类型会被共享
构造函数继承 在子类child里执行parent.call(this} 实例的引用类型不共享 ,可以传参 父类的方法不能复用,子类实例的方法每次都是被单独创建的
组合式继承 child.prototype = new parent(); parent.call(this) 父类的方法可以被复用;父类的引用属性不会被共享; 子类构建实例时可以向父类传递参数 调用两次父类的构造函数,第一次给子类的原型添加了父类的name, arr属性;第二次又给子类的构造函数添加了父类的name, arr属性,从而覆盖了子类原型中的同名参数
原型式继承
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值