js继承

  • 原型继承-prototype

   function Person(name,age){  
        this.name=name;  
        this.age=age;  
    }  


    Person.prototype.sayHello=function(){  
        alert("使用原型方法--Name:"+this.name);  
    }  
    var per=new Person("王二小",21);  
    per.sayHello();

      
    function Student(){} 
    Student.prototype=new Person("刘胡兰",33);  
    var stu=new Student();  
    Student.prototype.kill=yes;  
    Student.prototype.intr=function(){  
        alert(this.kill);  
    }  
    stu.sayHello();
    stu.intr();

  • 构造函数,又称使用对象冒充实现继承(实现原理:让父类的构造函数成为子类的方法,然后调用该子类的方法,通过this关键字给所有的属性和方法赋值)

   function  Parent(name){  
        this.name=name;  
        this.sayParent=function(){  
            alert("Parent:"+this.name);  
        }  
    }  

    function  Child(name,age){  
        this.parent=Parent;  
        this.parent(name);  

       delete this.parent;
        this.age=age;  
        this.sayChild=function(){  
            alert("Child:"+this.name+"age:"+this.age);  
        }  
    }  

    var parent=new Parent("潘金莲");  
    parent.sayParent(); 
    var child=new Child("张三",24);
    child.sayChild(); 

  • 采用call方法改变函数上下文实现继承(该种方式不能继承原型链,若想继承原型链,则采用5混合模式)

  实现原理:改变函数内部的函数上下文this,使它指向传入函数的具体对象

 function Parent(firstname)  
{  
    this.fname=firstname;  
    this.age=40;  
    this.sayAge=function()  
    {  
        console.log(this.age);  
    }  
}  
function Child(firstname)  
{  
 
    this.saySomeThing=function()  
    {  
        console.log(this.fname);  
        this.sayAge();  
    }  
   this.getName=function()  
   {  
       return firstname;  
   }   
}  
var child=new Child("张");  
Parent.call(child,child.getName());  
child.saySomeThing();

  • 采用Apply方法改变函数上下文实现继承(该种方式不能继承原型链,若想继承原型链,则采用5混合模式)

实现原理:改变函数内部的函数上下文this,使它指向传入函数的具体对象

与call方法区别在于,传入数组参数

var child=new Child("张");  
Parent.call(child,[child.getName()]);  
child.saySomeThing();

  • 采用混合模式实现继承

function Parent()  
{  
 
    this.sayAge=function()  
    {  
        console.log(this.age);  
    }  
}  
 
Parent.prototype.sayParent=function()  
{  
   alert("this is parentmethod!!!");  
}  
 
function Child(firstname)  
{  
    Parent.call(this);  
    this.fname=firstname;  
    this.age=40;  
    this.saySomeThing=function()  
    {  
        console.log(this.fname);  
        this.sayAge();  
    }  
}  
 
Child.prototype=new  Parent();  
var child=new Child("张");  
child.saySomeThing();  
child.sayParent();  

posted @ 2016-03-29 16:27  jeffery1010  Views(168)  Comments(0Edit  收藏  举报