JavaScripte中的Prototype机制(一)

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中定义的属性和方法。

你可能感兴趣的:(JavaScript,prototype,OO)