2006-12-15
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中定义的属性和方法。
发表评论
- 浏览: 5906 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
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






评论排行榜