javascript支持面向对象的开发(1)
发表于:2007-06-30来源:作者:点击数:
标签:
如果你使用JavaScript编程,你或许会怀疑它是否包含了 面向对象 (OO)的结构。实际上,JavaScript的确支持面向对象的架构――在某种程度上。本文将通过一个可扩展向量图形(SVG)的实例来说明JavaScript的OO结构。 我如何在类中定义方法和属性? OO 开发 的
如果你使用JavaScript编程,你或许会怀疑它是否包含了
面向对象(OO)的结构。实际上,JavaScript的确支持面向对象的架构――在某种程度上。本文将通过一个可扩展向量图形(SVG)的实例来说明JavaScript的OO结构。
我如何在类中定义方法和属性?
OO
开发的一个基本方面是类及其相应的方法和/或属性的使用。JavaScript通过
function关键字支持类(及其属性)的使用。下面的代码定义了一个叫做
Figure的JavaScript类:
function Figure() {
this.centerX=0;
this.centerY=0;
this.area=0;
this.transform = transform; // methods are defined like this
function transform(moveX,moveY,angle) {
this.centerX += moveX;
this.centerY += moveY;
} }
这个Figure类有三个属性:
centerX,
centerY,和
area。另外,它还有一个方法叫做
transform()。前三行是这个类的构造器。
但是它看起来不像一个类
你会想
Figure()看起来不像一个类,而更像一个JavaScript的函数。那么为什么
Figure()定义的是个类?
严格的说,
Figure()函数没有定义一个类,但是它仿造了一个。它实际上创建了一个对象,在括号里的代码使这个对象的构造器。JavaScript的对象支持是很基础的,它并不区分类和对象。
这就引到了问题为什么
Figure()函数创建的是一个对象。对象是可以有属性和方法的。基本上,因为
Figure()函数同时包含了属性和方法,它就是个对象。在JavaScript里,所有的函数即是对象又是可调用的代码块。这不像它听起来的那样容易被误解。要创建一个
Figure()类/对象,你只用使用以下句法:
MyFigure = new Figure();
你也可以把
Figure()函数当作代码块调用,就像这样:
figValue = Figure();
变量
figValue没有被定义是因为代码块
Figure()没有返回任何值。如果你把
return(this.area)加到函数的最后一行,
figValue就会有个值0。所以
figValue是个类型数字,
MyFigure是对象
Rectangle的实例。
为什么所有的变量前面都一个“this”?
这个关键字
this表示这是对象的实例变量,可以使用
MyFigure.centerX从对象外部访问。要让变量成为私有变量,去掉前缀this就行了。
this.transform = transform这一行让方法成为公用方法。这个方法通过
MyFigure.transform(100,100,0)调用。
原文转自:http://www.ltesting.net