prototype对象是个模版,要实例化的对象都以这个模版为基础.

总而言之,prototype对象的任何属性和方法都会被传递到那个类的所有实例,原型链利用这种功能来实现继承机制.

查看以下代码:

        function ClassA(){
            
        }
        
        ClassA.prototype.color='red';
        ClassA.prototype.getColor=function(){
            document.write(this.color);
        }
        
        function ClassB(){
        
        }
        
        var a= new ClassA();
        ClassB.prototype = a;

原型链的神奇之处在于最后一句代码.这里把ClassB的prototype属性设置成ClassA的实例,这样就将ClassA的所有属性和方法逐个赋值给了ClassB的prototype属性.

我们这样理解:

现在实例a有以下属性:color

实例a有以下方法:getColor

那么将a赋值给ClassB.prototype之后,ClassB的原型也就有了color属性和getColor方法.

那么在实例化ClassB的实例时,作为ClassB的原型,会将自身所有的方法和属性都传递给ClassB的实例,从而实现了继承.

同时,在实现继承之后,我们还可以对ClassB的prototype进行扩展:

        function ClassA(){
            
        }        
        ClassA.prototype.color='red';
        ClassA.prototype.getColor=function(){
            document.write(this.color);
        }
        
        function ClassB(){
        
        }        
        ClassB.prototype = new ClassA();
        ClassB.prototype.area=10;
        ClassB.prototype.getArea=function(){
            return this.area;
        }
        
        var b = new ClassB();
        b.getArea();

对代码进行调试,结果如下:

image

由此可以看出,ClassB继承了ClassA的属性和方法,同时也实现了自己的属性和方法.

 posted on 2009-12-15 08:36  野人哥哥  阅读(369)  评论(0编辑  收藏  举报