OO的JavaScript

原创 2006年05月25日 23:23:00
 

OO的JavaScript并不高深,麻烦就麻烦在google出来的国人介绍文章经常罗罗嗦嗦,而且之间的说法还各有不同,摆在一起就让人看了头大。
这里重拾简单主义,以一个最简单的例子把OO Javascript说明白。

1.一个颇为精简的例子

只需理解三个关键字:
第一个是function ,JS世界里Class的定义用"function",function里面的内容就是构造函数的内容。

第二个是this指针,代表调用这个函数的对象。

第三个是prototype,用它来定义成员函数, 比较规范和保险。

//定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area()
function Circle(radius)
{  
  this.r = radius;
}
Circle.PI = 3.14159;
Circle.prototype.area = function(  ) {return Circle.PI * this.r * this.r;}
//使用Circle类
var c = new Circle(1.0);  
alert(c.area());
另外成员函数定义还可以写成这样:
function compute_area(){return Circle.PI * this.r * this.r;}
Circle.prototype.area=compute_area;

2.继承

注意两点
1.定义继承关系 ChildCircle.prototype=new Circle(0); 其中0是占位用的
2.调用父类的构造函数 
     this.base=Circle;
     this.base(radius);

//定义ChildCircle子类
function ChildCircle(radius)
{  
     this.base=Circle;
     this.base(radius);
}

ChildCircle.prototype=new Circle(0);
function Circle_max(a,b)
{
    if (a.r > b.r) return a;

    else return b;
}
ChildCircle.max = Circle_max;
//使用ChildCircle子类
var c = new ChildCircle(1);
var d = new ChildCircle(2);  
var bigger = d.max(c,d);
alert(bigger.area());

3.var式定义
JS还支持一种var Circle={raidus:1.0,PI:3.1415}的形式,语法就如CSS的定义。
因此如果Circle只有一个实例,下面的定义方式更简洁:

var newCircle=
{
r:1.0,
PI:3.1415,
area: function(){ return this.PI * this.r * this.r;}
};
alert(newCircle.area());
BTW.吃饱了撑着可以看看Rails带的OO Javascript库--Prototype
其实,Javascript现在的语法真的不适合那么别扭的写成OO模式....
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JavaScript的OO思想(一)

类class是Object-Oriented面向对象的语言有一个标志,通过类我们可以创建任意多个具有相同属性和方法的对象。JavaScript中没有类的概念,但它也是面向对象的,只是实现方法会有所不同...

Javascript OO 基础概念(三)–原型继承

Javascript是一门面对对象的语言,在继承特性上是基于原型链继承,通俗一点讲就是打通原型链。对于子类和超类,他们的prototype都应该形成一条链,不管直接性的还是间接性的。而这两种形式带来的...

JavaScript-OO

JS OO 学习笔记

Javascript OO 基础概念(一)–构造函数

创建对象: 单体模式: 实例化Object()就可以得到一个对象,然后在给它添加方法和属性: view source print? 1 var ...

JavaScript的OO思想(二)

我们知道面向对象的语言有四大基本特性:抽象、继承、封装和多态。抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无...

[Javascript OO] 构造函数

OO: 类的概念, 通过类创建多个具有相同属性和方法的对象 封装 继承 多态(1) 构造函数-> 创建对象构造函数虽然首字母要大写,但是还是函数,只不过是用来创建对象的。 ...

Javascript 沒有 OO?是你不知道 OO 是什麼吧

在 Programming 圈子混久了,常常聽到人家說 Javascript 是一隻沒有 OO 的語言,又或者說 Javascript 的 OO 很弱,我想,這大概是因為大家都習慣了用 Class 來...

OO设计模式JAVA版

  • 2014-09-02 23:05
  • 2.03MB
  • 下载

OOA&D实践之路——真实案例解析OO理论与实践(七、【第一轮迭代】需求分析与领域分析)

在前面,我们花了六篇文章的篇幅去讨论需求分析之前发生的事情,这些内容看起来枯燥或飘渺,但实际是为真正开始系统的分析、设计和实现进行的必要准备。从这篇开始,将正式进入系统的开发阶段。这一篇文章,将讨论第...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)