继承的方法


1.约定
function Person(){
    var name="zs"//私有的基本属性
    var friend =["ls","ww"]//私有的引用属性
    function f1(){}//私有的函数
}
function Person(){
    this.name="zs"//实例的基本属性
    this.friend =["ls","ww"]//实例的引用属性
    this.f1=function(){}//实例的函数
}
2.原型链继承
创建一个对象,Animal,构造函数+原型
name 引用类型 方法 say eat
    function Animal(){
            this.name="animal"
            this.friends=['wb','b']
            this.say=function(){
                console.log("say...");
            }
        }
        Animal.prototype.eat=function(){  console.log("eat..."); }
function Cat(){
    Cat.prototype=new Animal()
    var c1=new Cat()
    c1.name
    c1.say()
}
总结:
核心:  Cat.prototype=new Animal()拿父类实例充当子类原型对象
原型链的查找顺序,先在实例内查找,找实力对象的构造函数,找实例对象的原型,父类的构造函数,找父类的原型

优点:简单易于实现,
缺点:原型的引用类型属性是所有实例共享的,
     创建子实例无法想父类构造函数传参

3.原型链的原理
(1)每个函数都有一个显示的“prototype”属性,该属性指向原型对象
(2)圆形对象中的“
(3)new创建的对象没有原型属性,
(4)每个对象都有一个__proto__内部属性,指向它所对应的原型对象
(5)原型链利用原型上一个引用类型继承另一个引用类型的属性方法
核心:原型链正是基于__proto__才得以形成
(6)当原型属性只想空的时候就是圆形的继承hh
4.构造函数的继承
总结:
核心:借用父类的构造函数,来增强子类的实例,完全没用到的原型,
优点:1.解决了子类实例共享父类引用属性的问题
      2.创建子类时可以向父类构造函数传参
缺点;无法实现函数的父用,每个子类实例都有一个新的function函数,消耗内存

5.组合继承(构造函数+原型链)
总结:
核心:把实力函数都放在原型对象上,以实现函数父用,并保留构造函数
优点:不存在调用属性共享问题
      可传参
     函数可复用 
缺点:因为父类构造函数被调用两次,生成两份浪费内存
6.原型式继承
function Animal(obj){
    function F(){}
        F.prototype=obj
        return new F()
    }
    var Person={name:"zs",friends:["ls","ww"]}
    var  p1=Animal(Person)


核心:用生孩子函数,得到一个纯洁的("没有实例属性的对象")e
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值