JS小计--面向对象

面向对象:是一种编程思想,JS本身就是基于面向对象构建出来的,JS中类和实例是基于原型和原型链机制来处理的。Java中面向对象有封装继承与多态这三个特点,js也一样。

封装:低耦合,高内聚

多态:多态又分为重写和重载,重写是指在类的继承中,子类重写父类的方法。重载则是指方法名相同,形式参数个数或者类型不一直[JS不存在真正意义上的重载,JS重载指的是同一个方法,根据传参不同来实现不同的效果]

继承:子类继承父类的属性和方法

 

关于js的继承,只要想记录以下几点

原型继承。让父类中的属性和方法在子类实例的原型链上,子类的原型指向父类的实例。

child.prototype = new parent();
child.prototype.constructor = child
//prototype=>公有相关
//constructor=>重定向

特点:

  • 不像其他语言的继承一样(其他语言的继承一般为拷贝继承),JS是把父类的原型放到子类实例的原型链上,实例想要调取这些方法, 是基于_proto_原型链查找几只完成的。
  • 子类可以重写父类上的方法(但也会导致父类其他实例变更)
  • 父类中私有或公有的属性和方法,最后都会变成子类中公有属性和方法

call继承。子类方法中吧父类当做普通函数执行,让父类的this指向子类的实例,相当于给子类的实例设置了很多的私有属性和方法。

特点:

  • 只能继承父类私有的属性或方法(因为是把父类当做普通函数执行,与其原型上的属性和方法无关)
  • 父类私有的属性或方法会变成子类私有的属性或方法

寄生组合继承。call继承+类似原生继承

特点:

  • 父类私有和共有的分别是子类实例的私有和共有属性方法

 

ES6中的继承(属于寄生组合),与前几个继承不同的是ES6的继承是由固定语法的。类似Java继承包含关键字extends

class child extends parent
{
 constructor(y){
  super();
  this.y=y;
 }
 getY(){
 console.log(this.y)
 }
}
//es6这类写法 类似于b.prototype._proto_= a.prototype
//constructor与super()必须同时存在,在继承中可以不写constructor,一旦写了第一句必须是super.
//若不写,则浏览器会默认创建constructor(...args){ super(...args)}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值