﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-PhoenixLi-文章分类-JavaScript</title><link>http://www.blogjava.net/lihao336/category/41651.html</link><description>成于坚忍，毁于浮躁</description><language>zh-cn</language><lastBuildDate>Thu, 10 Sep 2009 13:06:16 GMT</lastBuildDate><pubDate>Thu, 10 Sep 2009 13:06:16 GMT</pubDate><ttl>60</ttl><item><title>以一个最简单的例子把OO的JavaScript说明白</title><link>http://www.blogjava.net/lihao336/articles/294598.html</link><dc:creator>PhoenixLi</dc:creator><author>PhoenixLi</author><pubDate>Thu, 10 Sep 2009 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/lihao336/articles/294598.html</guid><wfw:comment>http://www.blogjava.net/lihao336/comments/294598.html</wfw:comment><comments>http://www.blogjava.net/lihao336/articles/294598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lihao336/comments/commentRss/294598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lihao336/services/trackbacks/294598.html</trackback:ping><description><![CDATA[<br />
<p>OO的JavaScript并不高深，麻烦就麻烦在google出来的国人介绍文章经常罗罗嗦嗦，而且之间的说法还各有不同，摆在一起就让人看了头大。<br />
这里重拾简单主义，以一个最简单的例子把OO Javascript说明白。</p>
<p>1.一个颇为精简的例子</p>
<p>只需理解三个关键字:<br />
第一个是function ，JS世界里Class的定义用"function"，function里面的内容就是构造函数的内容。</p>
<p>第二个是this指针，代表调用这个函数的对象。</p>
<p>第三个是prototype，用它来定义成员函数， 比较规范和保险。<br />
//定义Circle类，拥有成员变量r，常量PI和计算面积的成员函数area()<br />
function Circle(radius) <br />
{&nbsp; <br />
&nbsp;&nbsp;&nbsp; this.r = radius;<br />
}<br />
Circle.PI = 3.14159;<br />
Circle.prototype.area = function(&nbsp; ) {return Circle.PI * this.r * this.r;}<br />
//使用Circle类<br />
var c = new Circle(1.0);&nbsp;&nbsp; <br />
alert(c.area()); <br />
另外成员函数定义还可以写成这样:<br />
function compute_area(){return Circle.PI * this.r * this.r;}<br />
Circle.prototype.area=compute_area;</p>
<p>2.继承</p>
<p>注意两点<br />
1.定义继承关系 ChildCircle.prototype=new Circle(0); 其中0是占位用的<br />
2.调用父类的构造函数 <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.base=Circle;<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.base(radius);<br />
//定义ChildCircle子类<br />
function ChildCircle(radius) <br />
{&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.base=Circle;<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.base(radius);<br />
}</p>
<p>ChildCircle.prototype=new Circle(0);<br />
function Circle_max(a,b)<br />
{<br />
&nbsp;&nbsp;&nbsp; if (a.r &gt; b.r) return a;</p>
<p>&nbsp;&nbsp;&nbsp; else return b;<br />
}<br />
ChildCircle.max = Circle_max;<br />
//使用ChildCircle子类<br />
var c = new ChildCircle(1);<br />
var d = new ChildCircle(2);&nbsp;&nbsp; <br />
var bigger = d.max(c,d); <br />
alert(bigger.area());</p>
<p>3.var式定义<br />
JS还支持一种var Circle={raidus:1.0,PI:3.1415}的形式，语法就如CSS的定义。<br />
因此如果Circle只有一个实例，下面的定义方式更简洁：<br />
var newCircle=<br />
{<br />
r:1.0,<br />
PI:3.1415,<br />
area: function(){ return this.PI * this.r * this.r;}<br />
};<br />
alert(newCircle.area());<br />
BTW.吃饱了撑着可以看看Rails带的OO Javascript库--Prototype<br />
其实，Javascript现在的语法真的不适合那么别扭的写成OO模式....</p>
<br />
<br />
本文转自 http://calvin.javaeye.com/blog/92013
<img src ="http://www.blogjava.net/lihao336/aggbug/294598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lihao336/" target="_blank">PhoenixLi</a> 2009-09-10 16:02 <a href="http://www.blogjava.net/lihao336/articles/294598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>