面向对象(继承)

一、类与实例

  • 类的声明
  • 生成实例

二、类与继承

  • 如何实现继承
  • 继承的几种方式

三、一个对象继承的某个类,问你它的原型链

通过__proto__指向类的原型,然后指向object,最后指向null

一、

类的声明,1、构造函数2、es6的class
function Animal(){
this.name=‘name’;
}
class Animal2{
constructor(){
this.name=name;
}
}
//实例类的对象(实例化)
console.log(new Animal(),new Animal2())

二、

继承的本质就是原型链
js继承的几种形式,有几种方式,区别

继承的方式
1、借助构造函数实现继承
function Parent1(){
this.name=‘parent1’;
}
function Child1(){
Parent1.call(this);//apply,改变的是函数运行的上下文,父类的构造函数在子类中调用,并且修改this指向绑定到子类的实例上,从而导致父类执行的属性都会挂载到子类的实例上
this.type=‘child1’;
}
console.log(new Child1)
缺点:父类的原型对象上的方法子类拿不到
2、借助原型链

    function Parent2(){
        this.name='parent2';
        this.play=[1,2,3]
    }
    function Child2(){
        this.type='child2'
    }
    Child2.prototype=new Parent2();//子类的原型等于父类的实例

缺点:子类实例的原型都是父类的实例,是共用的,所以修改一个实例,会影响别的实例
3、组合继承
function Parent3(){
this.name=‘parent3’;
this.play=[1,2,3]
}
function Child3(){
Parent3.call(this);
this.type=‘child3’;
}
Child3.prototype=new Parent3();
var s1=new Child3();
var s2=new Child3();
s1.play.push(4);
缺点:父类的构造函数执行了俩次,由于call的时候复制了父类的实例,原型链继承的时候,通过原型链继承了父类原型上的方法和属性
优化一
Child4.prototype=Parent4.prototype;//继承原型上的
不足:改变了子类实例的construtor指向
优化二(寄生组合式继承)
Child5.prototype=Object.create(Parent5.prototype);//原型对象就是参数,优化了俩次属性和方法的继承
Child5.prototype.constructor=Child5//优化了constructor指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值