以一個(gè)最簡(jiǎn)單的例子把OO的JavaScript說(shuō)明白<http://blog.csdn.net/calvinxiu/archive/2005/05/20/377097.aspx> OO的JavaScript并不高深,麻煩就麻煩在google出來(lái)的國(guó)人介紹文章經(jīng)常羅羅嗦嗦,而且之間的說(shuō)法還各有不同,擺在一起就讓人看了頭大。 *1.一個(gè)頗為精簡(jiǎn)的例子* *只需理解三個(gè)關(guān)鍵字: 第二個(gè)是*this*指針,代表調(diào)用這個(gè)函數(shù)的對(duì)象。 第三個(gè)是*prototype*,用它來(lái)定義成員函數(shù), 比較規(guī)范和保險(xiǎn)。 //定義Circle類,擁有成員變量r,常量PI和計(jì)算面積的成員函數(shù)area() //使用Circle類 另外成員函數(shù)定義還可以寫(xiě)成這樣: function compute_area(){return Circle.PI * this.r * this.r;} *2.繼承* *注意兩點(diǎn)* //定義ChildCircle子類 else return b; //使用ChildCircle子類 *3.var式定義* var newCircle= BTW.吃飽了撐著可以看看Rails帶的OO Javascript庫(kù)--Prototype <http://prototype.conio.net/> Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=377097 errorter 發(fā)表于2005-05-21 14:31:00 IP: 61.186.252.* cedarjava 發(fā)表于2005-05-23 13:53:00 IP: 61.186.252.* GoADPASS 發(fā)表于2005-05-24 15:17:00 IP: 61.186.252.* calvin 發(fā)表于2005-05-26 00:25:00 IP: 61.186.252.* new Circle(0)表明調(diào)用的是function Cricle(i) Larlf 發(fā)表于2005-05-26 12:44:00 IP: 61.186.252.* xx 發(fā)表于2005-05-26 18:42:00 IP: 61.186.252.* xx 發(fā)表于2005-05-26 18:45:00 IP: 61.186.252.* ynyangtao 發(fā)表于2005-05-28 20:38:00 IP: 61.186.252.* vv 發(fā)表于2005-05-30 12:55:00 IP: 61.186.252.* 自由的飛碟 發(fā)表于2005-05-31 09:50:00 IP: Ping Back來(lái)自:www.donews.net aa 發(fā)表于2005-06-06 14:27:00 IP: 61.186.252.* 高溫接近開(kāi)關(guān) <http://www.5118.com/> 發(fā)表于2005-06-29 16:47:00 IP: 61.186.252.* yzsin 發(fā)表于2005-08-26 09:32:00 IP: 211.100.4.* amao 發(fā)表于2005-12-28 14:44:00 IP: 61.135.152.* obj.area = function( r ) { 這個(gè)是不是更好理解,更像JAVA的寫(xiě)法 amao 發(fā)表于2005-12-28 15:00:00 IP: 61.135.152.* 這樣寫(xiě)也可以 amao 發(fā)表于2005-12-28 15:05:00 IP: 61.135.152.* amao 發(fā)表于2005-12-28 15:07:00 IP: 61.135.152.* amao 發(fā)表于2005-12-28 15:13:00 IP: 61.135.152.* amao 發(fā)表于2005-12-28 15:21:00 IP: 61.135.152.* var Circle = new Function("this.PI = 3.14159;this.area = function( r )
這里重拾簡(jiǎn)單主義,以一個(gè)最簡(jiǎn)單的例子把OO Javascript說(shuō)明白。
*第一個(gè)是*function *,JS世界里Class的定義用"function",function里面的內(nèi)容就是構(gòu)造函數(shù)的內(nèi)容。
function Circle(radius)
{
this.r = radius;
Circle.prototype.area = function( ) {return Circle.PI * this.r * this.r;}
var c = new Circle(1.0);
alert(c.area());
Circle.prototype.area=compute_area;
1.定義繼承關(guān)系 ChildCircle.prototype=new Circle(0); 其中0是占位用的
2.調(diào)用父類的構(gòu)造函數(shù)
this.base=Circle;
this.base(radius);
function ChildCircle(radius)
{
this.base=Circle;
this.base(radius);
function Circle_max(a,b)
{
if (a.r > b.r) return a;
var c = new ChildCircle(1);
var d = new ChildCircle(2);
var bigger = d.max(c,d);
alert(bigger.area());
JS還支持一種var Circle={raidus:1.0,PI:3.1415}的形式,語(yǔ)法就如CSS的定義。
因此如果Circle只有一個(gè)實(shí)例,下面的定義方式更簡(jiǎn)潔:
{
r:1.0,
PI:3.1415,
area: function(){ return this.PI * this.r * this.r;}
其實(shí),Javascript現(xiàn)在的語(yǔ)法真的不適合那么別扭的寫(xiě)成OO模式....
[點(diǎn)擊此處收藏本文 <javascript:StorePage()>] 江南白衣發(fā)表于 2005年05月20日 19:57:00
呵 醍醐灌頂
漂亮極了
我對(duì)javascript有一些了解,但是對(duì)其中的oo概念,總是有些模糊,因?yàn)樗刮蚁氲絡(luò)ava的oo,多態(tài)作為oo的一個(gè)特性,在javavascript類構(gòu)造器張可以體現(xiàn)出來(lái),但是其中方法怎么不可以重載呢?
什么叫占位符???
占位符就是如果同時(shí)有如下函數(shù)
function Circle()
function Circle(i)
function Circle(i,j)
沒(méi)有看出引入prototype有什么太大的好處。
使用占位符也有較大的問(wèn)題:如果父類中有方法使用到構(gòu)造方法傳入的參數(shù)怎么辦?
如何獲得子類集成過(guò)來(lái)的父類的變量???
//定義ChildCircle子類
function ChildCircle(radius) {
this.base=Circle;
this.base(radius);
ChildCircle.prototype.getGirth = function () {
return 2 * this.r * this.PI ;//如何獲得子類集成過(guò)來(lái)的父類的變量???
this.r是錯(cuò)的,this.base.r也是錯(cuò)的
其實(shí)prototype就相當(dāng)于java里的static了,你說(shuō)java缺少static行嗎?
javascript太弱了,用他來(lái)OOP感覺(jué)嘔心嚦血
TrackBack來(lái)自《以一個(gè)最簡(jiǎn)單的例子把OO的JavaScript說(shuō)明白
》<http://www.donews.net/z954134/archive/2005/05/31/406070.aspx>
:
js高手可不是這樣寫(xiě)的.
真系不是普通的難
javascript的類定義太不清晰了,與java要差太離譜了, vbscript的類定義還是比較清晰,好像只是不支持繼承,語(yǔ)法與vb類似
var Circle = function() {
var obj = new Object();
obj.PI = 3.14159;
return this.PI * r * r;
return obj;
}
alert( c.area( 1.0 ) );
var Circle = new Object();
Circle.PI = 3.14159;
Circle.prototype.Area = function( r ) {
return this.PI * r * r;
上面寫(xiě)錯(cuò)了
var Circle = new Object();
Circle.PI = 3.14159;
Circle.Area = function( r ) {
return this.PI * r * r;
還可以這樣寫(xiě)
var Circle={
"PI":3.14159,
"area":function(r){
return this.PI * r * r;
};
個(gè)人很反對(duì)JS寫(xiě)成OO的形式,真是沒(méi)有必要
更絕的寫(xiě)法
{return r*r*this.PI;}");
alert( (new Circle()).area(1.0) );
聯(lián)系客服