js--继承

js继承一般分为3种办法,一种是es5基于原型的继承以及es5的call( ),一种是es6基于类继承

// 使用JavaScript继承机制,实现两个类之间的继承。
// 父类:人,属性:年龄、身高、性别。方法:行走、行走、睡觉。
// 子类:学生,属性:年级、学分。方法:上学、放学、休学。
// 目标,创建子类学生的实例,调用行走、吃饭、睡觉、上学、放学、休学6个方法。

【基于原型继承】

        //es5实现继承[基于原型继承]
            function Person(age,height,sex){
                this.name=name;
                this.age=age;
                this.height=height;
                this.sex=sex;
                this.go=function(){
                    console.log("行走")
                };
                this.eat=function(){
                    console.log("行走")
                };
                this.sleep=function(){
                    console.log("睡觉")
                };
            }
            
            function Student(nj,sc){
                this.nj=nj;
                this.sc=sc;
                this.goSchool=function(){
                    console.log("上学")
                }
                this.bybySchool=function(){
                    console.log("放学")
                }
                this.overSchool=function(){
                    console.log("休学")
                }
            }
            
            
            Student.prototype=new Person();
            var stu=new Student(2,30);
            stu.go();
            stu.sleep();
            stu.goSchool();
            stu.bybySchool();
            stu.overSchool();


【call( )、apply( )】
说简单一点,这两函数的作用其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
两个函数基本相同,唯一的区别是,后者可以接受多个参数,即参数可以数组
func.call(func1,var1)对应的apply写法为:func.apply(func1,[var1,var2,var3])。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
        //类式继承:利用JS中的call()和apply()方法
            function Animal(){    
                this.name = "Animal";    
                this.showName = function(){alert(this.name);}    
            }    
            function Cat(){this.name = "Cat";}    
               
            var animal = new Animal();    
            var cat = new Cat();    
                
            //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
            animal.showName.call(cat,","); //animal.showName.apply(cat,[]); 
        </script>
    </body>
</html>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            function Animal(name){      
                this.name = name;      
                this.showName = function(){      
                    alert(this.name);      
                }      
            }      
                
            function Cat(name){    
                Animal.call(this, name);    
            }      
                
            var cat = new Cat("Black Cat");     
            cat.showName(); 
            /*Animal.call(this) 的意思就是使用 Animal对象代替this对象,
             * 那么 Cat中不就有Animal的所有属性和方法了吗,
             * Cat对象就能够直接调用Animal的方法以及属性了.*/
        </script>
    </body>
</html>

【基于类继承】

       //es6实现继承[基于类继承]
            class Person{
                constructor(age,height,sex){
                    this.age=age;
                    this.height=height;
                    this.sex=sex;
                }
                go(){
                    console.log("行走")
                };
                eat(){
                    console.log("行走")
                };
                sleep(){
                    console.log("睡觉")
                };
            }
            
            class Student extends Person{
                constructor(nj,sc){
                    super()
                    this.nj=nj;
                    this.sc=sc;
                }
                goSchool(){
                    console.log("上学")
                }
                bybySchool(){
                    console.log("放学")
                }
                overSchool(){
                    console.log("休学")
                }
            }
            var stu=new Student(2,30);
            stu.go();
            stu.sleep();
            stu.goSchool();
            stu.bybySchool();
            stu.overSchool();
原文地址:https://www.cnblogs.com/dshvv/p/5401272.html