javascript的三种继承方式

javascript中有三种继承方式:
    构造继承:
        通过 this 指针的方式,将其它类型的属性继承到当前的类型中。
       
        原理:
            通过执行其它类型的构造方法,将当前对象的指针 this 传入,那么其它类型this.xx 指定
        的属性和方法就会被重定向到当前传入的对象的指针 this 上。
       
        弊端:
            只能继承 动态属性 ,也就是由 this 指定的方法和属性。
       

function println(string)
        {
            document.write(string + "</BR>");
        }
       
        function Father()
        {
            this.name = "father";
        }

        Father.prototype.info = "teacher";

        function Son()
        {
            // 继承 Father 的动态属性
            this.base = Father; // 引用 Father 构造方法
            this.base.call(this, arguments); // 调用 Father 的构造方法,将当前对象的指针传入
            // arguments 是方法的其它参数 ,可以省略
            // 在 Father 的构造方法执行后,name属性的指针变为当前Son对象的指针,所以
            // son对象也具有了 name 属性的值。
           
            this.age = 20;
        }

        var son = new Son();
        println(son.name); // father     父类的指针被传入的参数替换为当前子类的指针
        println(son.info); // undefined  父类的原型属性指针并没有指向子类

 

       
    原型继承:
        推荐的方式,也是最常用的方式。
        通过指定 prototype 原型为一个对象,来继承该对象所拥有的共有属性和方法。
        原型继承是最常用的继承方法,其代码结构清晰,继承范围广。
        能够继承指定对象的 动态属性 和 静态属性。
       

 function println(string)
        {
            document.write(string + "</BR>");
        }
               
        function Father()
        {
            this.name = "father";
        }

        Father.prototype.info = "teacher";

        function Son()
        {
            this.age = 20;
        }

        Son.prototype = new Father();

        var son = new Son();
        println(son.name);  // father     父类的属性(动态属性)
        println(son.info);  // teacher    父类的原型属性(静态属性)
        println(son.age);   // 20         子类的属性

 


    实例继承:
        在构造中初始化一个类型的实例,通过该实例调用其类型的方法。
       

function println(string)
        {
            document.write(string + "</BR>");
        }
       
        function Father()
        {
            this.name = "father";
        }

        Father.prototype.info = "teacher";

        function Son()
        {
            this.base = new Father();    // 父类的实例
           
            this.name = this.base.name;    // 通过父类的实例访问父类的属性
            this.age = 20;
            this.info = this.base.info;    // 通过父类的实例访问父类的属性
        }


        var son = new Son();
        println(son.name);  // 父类的属性(动态属性)
        println(son.info);  // 父类的原型属性(静态属性)
        println(son.age);   // 子类的属性

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值