众所周知,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属性
 
这是我第一次写博客,语文成绩一向不好,作文分数老是上不去,请大家多多包含!!!!

作者: 从前有一个人叫光子 发表于 2011-05-27 17:51 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架