javascript中的原形继承(二)

  上一节我们讲了原型的基本概念,这次我准备讲讲原型继承的实质。

1、原型修改

我们通过前面知道

a、原型是一个对象

b、在属性访问时,如果没有子类对象该属性,则访问其原型的成员列表。

       根据这些特性可以知道,我们如果修改一个构造器的原型,则所有由该类创建的实例都将受到影响。如果有其他子类继承自该类,则所有的子类也将受到影响,因为在存取成员列表时必将回溯到该类。

        修改原型是javascript中最常用的构建对象系统的方法,他的好处是可以在实例构造之后动态的影响到这些实例。也就是说,对象实例的特性不但可以在new运算符中通过“构造”来产生,也可以在此后通过“原型修改”来产生。简单的示例说明如下:

//构造器声明

function myobject(){

}

//构造完成后并没有对象成员‘name’

var object = new myobject();

alert('name' in object);

//通过原型得到成员‘name’

myobject.prototype.name = 'myobject';

alert('name' in object);

这种修改原型的特性,是我们下面讨论原型继承的基础

2、原型继承

    用来讲述原型继承的一个比较学术的示例,是做一个动物王国的模型。但是,无论有何等伟大的构想,我们也得从一只猫和一只狗开始

function Animal(){};//动物

function Mammal(){};//哺乳类

function Canine(){};//犬类

function Dog(){};//狗

function Cat(){};// 猫


//2.原型列表

Mammal.prototype = new Animal();

Canine.prototype = new Mammal();

Dog.prototype = new Canine();

Cat.prototype = new Mammal();

//3.示例函数

function isAnimal(obj){

    return obj instanceof Animal;

}

//4.示例代码

var dog = new Dog();

var cat = new cat();

alert(isAnimal(dog));

结果输出true,证明狗是一种动物,也证明我们得生物学的不错。接下来我们要在这个系统上应用第一个规则:动物呼吸。我们该怎么做呢?

这要用到上面讲述得“原型修改”得方法了

Animal.prototype.respire = function() {

    //交换氧气与二氧化碳

}  

现在我们就可以看见无论是dog还是cat都可以呼吸了


你可能感兴趣的:(JavaScript,function,动态,影响)