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;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值