国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript 面向對象編程(2) 定義類

2024-05-06 14:09:58
字體:
來源:轉載
供稿:網友
本文承接上一篇JavaScript面向對象編程(1) 基礎。
上篇說過,JavaScript沒有類的概念,需要通過函數來實現類的定義。先通過一個例子說明:
代碼如下:
function myClass()
{
var id = 1;
var name = "johnson";
//properties
this.ID = id;
this.Name = name;
//method
this.showMessage = function()
{
alert("ID: " + this.ID + ", Name: " + this.Name);
}
}
var obj1 = new myClass();
var obj2 = new myClass();

function的定義實際上相當于類的構造函數,最后兩句是創建這個類的實例。先分析第一句:var obj1 = new myClass(); 當用new創建類的實例時,解釋器首先會創建一個空的對象。然后運行這個myClass函數,并將this指針指向這個類的實例。當碰到this.ID = id;和this.Name = name;及this.showMessage = function(){...}時,便會創建這兩個屬性,和這個方法,并把變量id,name的值一級函數的定義賦給這兩個屬性及這個函數對象(shwoMessage)。這個過程相當于初始化這個對象,類似于C# 中的構造函數。最后new返回這個對象。再看第二句:var obj2 = new myClass(); 執行過程與上一句代碼相同,即創建一個空對象,然后執行myClass這個函數,定義兩個屬性和一個方法。
從上面的分析中可以看到,上面這種實現類的方式,即在函數的定義中定義類的屬性方法。存在著弊端。如果需要創建兩個或更多這個類的實例時,上文是兩個,這些屬性會被重復的創建多次。
那么如何避免這種情況呢?上一篇中也曾提到過用prototype。prototype和它的名字一樣是一個原型,每一個function都有一個子對象prototype,它其實表示這個function對象的成員的集合,由于這里我們使用function實現類的,所以可以說prototype其實就是便是類的成員的集合。prototype定義的屬性和方法執行在函數的構造體執行之前,所以當new一個對象之前,其實prototype的成員已經執行過了。先看一個例子:
代碼如下:
function myClass()
{
//構造函數
}
myClass.prototype =
{
ID: 1,
Name: "johnson",
showMessage: function()
{
alert("ID: " + this.ID + ", Name: " + this.Name);
}
}
var obj1 = new myClass();
var obj2 = new myClass();

類的結構還是和前面的例子相同,只不過這里是利用了prototype來實現。還是先看最后兩句,前面說過,prototype是執行在函數構造體之前,即執行到var obj1 = new myClass();之前,這個類已經有了ID,Name屬性和showMessage方法。執行者一句時執行過程如下,注意和前一個例子比較:首先還是創建一個空的對象,并把this指針指向這個對象。然后將函數的prototype對象的所有成員都賦給這個對象(注意沒有再創建這些成員)。然后執行函數體。最后new返回這個對象。執行下一句時:同樣執行此過程,不會重復創建這些成員。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 郧西县| 都安| 玉田县| 滦南县| 阳城县| 镇巴县| 娱乐| 瓦房店市| 军事| 成安县| 麟游县| 汪清县| 太仆寺旗| 长治县| 拉孜县| 尼勒克县| 繁峙县| 中超| 江达县| 铁力市| 诏安县| 金沙县| 尼玛县| 班玛县| 通许县| 乳源| 通州区| 龙山县| 大悟县| 天气| 武定县| 楚雄市| 通道| 高密市| 正宁县| 临沭县| 图们市| 裕民县| 东丽区| 南岸区| 乌审旗|