为了账号安全,请及时绑定邮箱和手机立即绑定

Js继承 小结

标签:
JavaScript

继承

一、类式继承
二、原型链继承
三、组合继承

  1. 类式继承
    实现:在子类函数内部,使用call()、apply()、bind()改变父类内部this指向,指向子类创建的实例。
    例子:

//父类function People(name, age) {    this.name = name;    this.age = age;
}//原型方式设置共有属性People.prototype.eyes = "眼睛";//子类function Teacher(name, age) {
    
    People.call(this, name, age);//方法一: call()
    
    People.apply(this, [name, age]);//方法二: apply() 
    
    var fuc = People.bind(this, name, age);//方法三: bind()
    
    fuc()    
//  1. call和apply区别在于apply的第二个参数必须是数组类型, //  所有传的参数必须存放在数组中。//  call的可以是任意类型, 但是参数需要单独传递。//  2. bind的参数和call的一致, 但call和apply都是立即执行, bind是返回一个函数,//  需要调用函数后执行。}var tea = new Teacher("老陈", 26)  //{name:"老王",age:26}console.log(tea);//{}console.log(Teacher.prototype)

缺点:不是真正的继承,子类不能拥有父类原型的属性。 子类原型没有继承父类的属性,不能实现复用。
优点:可以向父类传递参数

  1. 原型式继承
    实现:将父类的实例赋值给子类的原型。
    例子:

//父类function People() {    this.name = "张三"}
People.country = "中国";//子类function Teacher() {}
Teacher.prototype = new People();var tea = new Teacher();console.log(tea);           //{name:"张三",country:"中国"}console.log(Teacher.prototype); //{country:"中国"}

缺点:不能在创建子类实例时向父类传参
优点:子类的原型能够拥有父类原型以及实例的属性,可以复用

  1. 组合式继承
    实现:将父类的实例赋值给子类的原型。
    例子:

//父类function People(name, age) {    this.name = name;    this.age = age;
}
People.country = "中国";//子类function Teacher(name, age) {
    People.call(this, name, age);
}
Teacher.prototype = new People();var tea = new Teacher("老王", 24);console.log(tea); //{country:"中国",name:"老王",age:24}console.log(Teacher.prototype); //{country:"中国"}

优点:既能向父类传参,又能继承父类原型的属性,实现真正意义上的继承,可复用。



作者:一号男嘉宾_
链接:https://www.jianshu.com/p/0bfae19e4282


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消