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

评论
发表评论

您还没有登录,请登录后发表评论

bbiao
搜索本博客
博客分类
存档
最新评论
  • Apache的中配置Directory ...
    多谢了!!今天部署也出现和你一样的问题!也整了二三个小时 最后看你的贴子关了se ...
    -- by javadonkey
  • YUI的一点优点
    老朽的HTML已经不能适应这个时代的需要了,应该有新的标准语言出来统一大家的标识 ...
    -- by clia
  • YUI的一些不足
    刚看了YUI的代码,对于Container下的属性的配置,是不区别大小写的,所以 ...
    -- by bbiao
  • YUI的一点优点
    air已经是这样做,号称是可利用当前的HTML/CSS/JS技术。迁移到桌面程序 ...
    -- by sp42
  • YUI的一点优点
    jellyme 写道LZ在YUI的看法上,我是非常赞同的。但是LZ提及的Prog ...
    -- by bbiao