javascript杂谈:继承

众所周知,javascript 是基于对象的语言,没有提供继承机制,但是可以通过一些手段实现继承,而实现继承主要依靠prototype。

1.

function Animal()
{
//构造函数
this.color = "红色";
}

Animal.prototype.run = function()
{
alert("奔跑!");
}

function Cat()
{
//构造函数
}

//继承方法
Cat.prototype = new Animal();

//添加子类实例方法
Cat.prototype.eat = function()
{
alert("吃鱼!");
}

上面的继承是如何实现的,请看下图:

继承2

2.若prototype属性是引用类型,则被所有实例共享。将Animal类color属性修改成引用类型,会影响所有Animal类的实例。将Animal类和Cat类的构造方法修改一下:

function Animal()
{
    //构造函数
    this.color = ["红色","绿色","蓝色"];    
}
 
function Cat()
{
    //构造函数
    Animal.call(this);
}
代码分析,请看下图:
继承3
语句Animal.call(this)为类Cat实例设置color属性,实例属性对于单元实例对象是独立的,所以解决了引用类型属性共享问题。(实例中color属性屏蔽prototype对象中保存的color属性
posted @ 2011-05-27 17:51  guangzi  阅读(950)  评论(3编辑  收藏  举报