不錯(cuò)的JavaScript面向?qū)ο蟮暮唵稳腴T介紹第2/2頁
更新時(shí)間:2008年07月03日 20:50:41 作者:
JavaScript是一門OOP,而有些人說,JavaScript是基于對(duì)象的。
4) 方法
以下例子引用于<<__JavaScript: The Definitive Guide>>
function Rectangle_area( ) { return this.width * this.height; }
function Rectangle_perimeter( ) { return 2*this.width + 2*this.height; }
function Rectangle_set_size(w,h) { this.width = w; this.height = h; }
function Rectangle_enlarge( ) { this.width *= 2; this.height *= 2; }
function Rectangle_shrink( ) { this.width /= 2; this.height /= 2; }
function Rectangle(w, h)
{
this.width = w;
this.height = h;
this.area = Rectangle_area;
this.perimeter = Rectangle_perimeter;
this.set_size = Rectangle_set_size;
this.enlarge = Rectangle_enlarge;
this.shrink = Rectangle_shrink;
}
這種風(fēng)格可能和Java,c++很不同。方法中的this表示調(diào)用它的對(duì)象的引用。
5) prototype
prototype是一個(gè)對(duì)象,每個(gè)類都包含一個(gè)prototype對(duì)象(注意,每個(gè)類一個(gè),而不是每個(gè)對(duì)象一個(gè))。
看看下面的例子:
function User(name)
{
this.name = name
}
User.prototype.name = "killercat" // 類名.prototype.屬性(或方法)
user = new User("who"+"<br />")
document.write(user.name)
delete user.name
document.write(user.name)
再看一個(gè)例子:
function User(name)
{
}
User.prototype.name = "human"
user1 = new User()
user2 = new User()
document.write(user1.name+"<br />")
document.write(user2.name)
結(jié)果:
human
human
說明了,每個(gè)類一個(gè)prototype對(duì)象,而不是每個(gè)對(duì)象單獨(dú)一個(gè)。
obj.x 這條語句的查找順序是,先在obj中找x屬性,假如沒有,再進(jìn)入obj對(duì)應(yīng)的類中找prototype.x,對(duì)于方法來說,也一樣。因此,不要出現(xiàn)這樣的語句: user.prototype.name = "xxx" 必須是 user.name = "xxx" (prototype對(duì)象屬于一個(gè)類,而不是一個(gè)對(duì)象)
類名.prototype.屬性 // 相當(dāng)于一個(gè)實(shí)例變量(屬性),對(duì)方法也一樣
類名.屬性 // 相當(dāng)于一個(gè)靜態(tài)變量(屬性),對(duì)方法也一樣,調(diào)用的時(shí)候必須使用"類名.屬性",不能使用"類對(duì)象.屬性",因?yàn)樗鼘儆谝粋€(gè)類,而不是一個(gè)對(duì)象。
例如:
function User(name)
{
this.name = name
}
User.type = "human"
user = new User("kc")
document.write(User.type + "<br />")
document.write(user.type)
結(jié)果:
human
undefined
另外,每個(gè)prototype都有一個(gè)constructor屬性,默認(rèn)用于保存constructor的定義,例如上面的user對(duì)象,調(diào)用:
user.constructor得到:
function User(name) { this.name = name; }
我們可以通過typeof,知道參數(shù)的類型,假如是對(duì)象,就返回"object",假如是方法就返回"function"
6) 利用prototype實(shí)現(xiàn)類間的繼承,例如:
// 父類
function Circle(r){
this.r = r;
}
Circle.PI = 3.14;
Circle.prototype.getArea = function (){
return Circle.PI * this.r * this.r;
};
Circle.prototype.toString = function (){
if(( typeof this == "object") && (this.constructor == Circle)){
return "circle with a radius " + this.r ;
}
else{
return "unknown object";
}
};
Circle.max = function (c1,c2){
return c1.r >= c2.r ? c1 : c2;
};
// 子類
function ColorCircle(r,color){
this.r = r;
this.color = color;
}
ColorCircle.prototype = new Circle(0); // 保存父類的對(duì)象
ColorCircle.prototype.constructor = ColorCircle; // 為constructor 改名字
ColorCircle.prototype.toString = function(){
if(( typeof this == "object") && (this.constructor == ColorCircle)){
return this.color+" circle with a radius " + this.r ;
}
else{
return "unknown object";
}
}
ColorCircle.prototype.getColor = function(){
return this.color;
}
ColorCircle.prototype.setColor = function(color){
this.color = color;
}
也就是,使用prototype保存父類的對(duì)象,在構(gòu)造子類的時(shí)候,父類對(duì)象同時(shí)被構(gòu)造(因?yàn)閜rototype被構(gòu)造)。也就是JavaScript繼承其實(shí)就是讓子類的prototype對(duì)象保存父類的對(duì)象。
您可能感興趣的文章:
- JavaScript面向?qū)ο蟮膬煞N書寫方法以及差別
- JavaScript面向?qū)ο缶幊?/a>
- JS面向?qū)ο蟆rototype、call()、apply()
- javascript 面向?qū)ο笕吕砭氈當(dāng)?shù)據(jù)的封裝
- Javascript 面向?qū)ο螅ㄒ唬?共有方法,私有方法,特權(quán)方法)
- JS左右無縫滾動(dòng)(一般方法+面向?qū)ο蠓椒ǎ?/a>
- jquery方法+js一般方法+js面向?qū)ο蠓椒▽?shí)現(xiàn)拖拽效果
- javascript面向?qū)ο笕腴T基礎(chǔ)詳細(xì)介紹
- 學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象
相關(guān)文章
改變javascript函數(shù)內(nèi)部this指針指向的三種方法
javascript 的this 值,真的是非常的莫名奇妙。我一直被搞的很頭暈,也許正是這個(gè)this,讓大多數(shù)人感覺js 非常的莫名其妙。2010-04-04
javascript面向?qū)ο缶幊?一) 實(shí)例代碼
javascript面向?qū)ο缶幊虒?shí)例代碼,代碼也算比較基礎(chǔ)了,不懂得朋友可以參考腳本之家之前發(fā)布的文章。2010-06-06
javascript 面向?qū)ο缶幊袒A(chǔ):封裝
“在面向?qū)ο蟮乃枷胫?,最核心的概念之一就是類。一個(gè)類表示了具有相似性質(zhì)的一類事物的抽象,通過實(shí)例化一個(gè)類,可以獲得屬于該類的一個(gè)實(shí)例(即對(duì)象)”。2009-08-08
一實(shí)用的實(shí)現(xiàn)table排序的Javascript類庫
一實(shí)用的實(shí)現(xiàn)table排序的Javascript類庫...2007-09-09
Javascript 類與靜態(tài)類的實(shí)現(xiàn)
在Javascript里,對(duì)面向?qū)ο蟛]有一個(gè)直接的實(shí)現(xiàn),對(duì)于代碼方面也是非常的靈活。2010-04-04
javascript 設(shè)計(jì)模式之單體模式 面向?qū)ο髮W(xué)習(xí)基礎(chǔ)
單體是在腳本加載時(shí)創(chuàng)建的,能將一系列有關(guān)聯(lián)的變量和方法組織為一個(gè)邏輯單元,邏輯單元里面的內(nèi)容通過單一的變量進(jìn)行訪問,也是筆記基礎(chǔ)與常用的面向?qū)ο蟮亩x方法。2010-04-04

