bbiao的专栏

天行健,君子以自强不息;地势坤,君子以厚德载物!

原创 JavaScripte中的Prototype机制(一)收藏

新一篇: 使用Vista引导Linux | 旧一篇: 迷惘的时候

JavaScript不是一个真正的OO语言,但是通过提供prototype对象实现了一些OO的特性。本文是作者在使用JS中OO特性的一些心得体会。

下面我们首先来看一下如何在JavaScript中定义一个类(不使用prototype):

function Base()
{
        
this.name = "name";
        
this.show = function() 
        
{
                alert(
this.name);
        }

}

以上这段代码中,我们声明了一个类Base,并且为该类添加了一个成员变量name和一个成员函数show,通过经下代码就可以实现生成该类的一个实例:

var base = new Base();
base.show();

但是这种声明类的方法有一个明显的不足之处,每当新建该类的一个实例时,我们都会创建所有方法的一个副本,也就是说,所有类的show方法是在内存中的不同地址的,而且类的成员变量的声明与定义被放到了一起,比较容易产生混淆。下面,我们通过引入prototype机制来实现清晰的类定义。

function Base()
{
    
// Constructor here.
    // ...
}


Base.prototype 
= 
{
    name: 
"base",
    show: 
function()
    
{
        alert(
this.name);
    }

}

现在我们来看new的执行过程:
1、创建一个新的对象,并让this指针指向它;
2、将函数的prototype对象的所有成员都赋给这个新的对象;
3、执行函数体,对这个对象进行初始化操作;
4、返回(1)中创建的对象。
现在在new的执行过程当中,多了用prototype来初始化对象的过程,这也和prototype的字面意思相符,它是所对应类的实例的原形。这个初始化过程发生在函数体(constructor)执行之前,所以在函数体内部可以调用prototype中定义的属性和方法。

发表于 @ 2006年12月15日 11:07:00|评论(loading...)|编辑

新一篇: 使用Vista引导Linux | 旧一篇: 迷惘的时候

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © bbiao