js的继承问题

今天我们来说说继承的问题吧,以前js的继承总是弄的我头疼死了,现在总算是弄明白了啥是继承,先来个简单的例子:

方式一:

function createPerson(name,age)

{

this.name=name;

this.age=age;

    this.showName=function()

    {

alert(this.name);

    }

}

var p1=new createPerson(‘one‘,18);

var p2=new createPerson(‘two‘,20);

alert(p1.showName==p2.showName) //false;

想知道这个地方为啥弹出来的是false吗? 我来解释解释吧

这个地方,var p1=new createPerson(‘one‘,18);的时候 ,就会执行 createPerson这个函数,我们用new createPerson相当于:

function createPerson(name,age)

{

//var this=new Object() //用new createPerson相当于系统替咱们新建了一个对象;

this.name=name;

this.age=age;

    this.showName=function()

    {

alert(this.name);

    }

    return this;  //用new createPerson相当于系统替咱们返回了这个对象;

}

所以,执行完var p1=new createPerson(‘one‘,18);的时候,就创建了一个p1对象,这个对象上有name和age属性,还有一个showName方法;执行完var p2=new createPerson(‘two‘,20);的时候,就会创建一个p2对象,这个对象也有name和age属性,还有showName方法;虽然执行alert(p1.showName)和alert(p2.showName)的时候,弹出的内容是一样的,但是这里this指的是不同的对象,一个是p1对象,一个是p2对象,p1和p2是不同的2个对象,所以alert(p1.showName==p2.showName) //false;

方式二:

function createPerson(name,age)

{

this.name=name;

this.age=age;

}

createPerson.prototype.showName=function()

{

alert(this.name);

}

var p1=new createPerson(‘one‘,18);

var p2=new createPerson(‘two‘,20);

alert(p1.showName==p2.showName) //true;

在这个例子中,用构造函数createPerson添加属性,然后用原型添加方法,当执行alert(p1.showName==p2.showName)这个的时候,由于p1和p2都没有showName方法,所以就去找他们的父级createPerson.prototype.showName,在他们的父级上找到了showName方法,而且p1和p2都是同一个父级,由于p1和p2都继承了父级的showName方法,所以alert(p1.showName==p2.showName) //true;

js的继承问题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。