javascript面向对象思想的学习(三)

本文介绍了JavaScript中实现面向对象继承的三种方法:构造函数绑定、通过prototype属性继承及直接继承prototype。并详细解释了每种方法的具体实现过程及其特点。

       在前面学习的是js的面向对象中数据的封装。类方法和原型方法的一些区别,所以现在是面向对象的继承的几种方法:

有一个动物对象的构造函数

function Animal()
{
  this.species = "动物";
}

有一个猫对象的构造函数

function Cat(name,color)
{
    this.name = name;
    this.color = color;
}

 如何使猫继承动物呢

一:构造函数的绑定

使用call或者apply方法,将对象的构造函数绑定在子对象上,即在子对象的构造函数中加一行


function Cat(name,color)
{
   Animal.apply(this, arguments);
   this.name = name;
   this.color = color;
}
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物

 

使用prototype属性,如果猫的prototype对象,指向一个Animal的实例,那么所有猫的实例就能继承Animal了。

 

 

Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物

下面是解释

//这一行是讲Cat的prototype对象指向Animal的一个实例,相当于将新值覆盖了了原来的值
Cat.prototype = new Animal();

任何一个prototype对象都有一个constructor属性,指向他的构造函数。如果没有“Cat.prototype = new Animal();”Cat.prototype.constructor是指向Cat 的,加了之后指向Animal

Cat.prototype.constructor = cat;

 

更重要的是,没一个实例都有一个constructor属性,默认调用prototype对象的constructor属性

因此在运行

Cat.prototype = new Animal()

 

之后,cat1.constructor也指向Animall。

三、直接继承prototype

这是第二种方法的改进,因为Animal对象中,不变的属性可以直接写入Animal。prototype中,所以我们可以直接继承Animal.prototype.

首先,将Animal改写为

function Animal(){};
Animal.prototype.species = '动物';

 然后将Cat的prototype对象指向Animal的prototype,这样就完成了继承

Cat.prototype = Animal.prototype ;
Cat.prototype.xonstructor  = Cat ;
var cat1 = new Cat('damao','haunse');
alert(cat1.species);

 

这种方法效率较高,比较省内存,但是Cat.prototypeAnimal.prototype同时指向了同一对象,那么任何对Cat.prototype的修改都会反映到Animale.prototype。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值