直接看js好了,模擬創建一個奧運會
function 奧運會Class(主題) { // 刪除主題 // delete this.主題; this.主題 = 主題; this.開幕時間; this.閉幕時間; this.公告簿 = ""; //模擬開幕 this.開幕 = function () { this.開幕時間 = "2012年7月28日03時12分(北京時間)"; this.公告薄 = "奧運主題:" + this.主題 + "\n" + "開幕時間:" + this.開幕時間 + "\n" + "倫敦奧運會開幕了\n"; this.公告發布event(this, this.公告薄); } //模擬閉幕 this.閉幕 = function () { this.閉幕時間 = "2012年8月13日 04:00(北京時間)"; this.公告薄 += this.閉幕時間 + "倫敦奧運會閉幕了\n"; this.公告發布event(this, this.公告薄); } //模擬事件的方法 this.公告發布event = function(sender, e) { } //構建集合對象 this.國家集合 = new Array(); this.運動員集合 = new Array(); this.裁判集合 = new Array(); this.項目集合 = new Array(); //創建一個通用查詢 this.通用查詢 = function (對象源, 查詢集合對象名稱, 查詢字段, value) { for (var aa in 對象源) { if (aa == 查詢集合對象名稱) { var source = 對象源[aa]; if (aa == 查詢集合對象名稱) { for (var i = 0; i <= source.length; i++) { var s = source[i.toString()]; if (s[查詢字段] == value) { return s; } } } } } return null; } } //閉包擴展,在原型上擴展方法 奧運會Class.prototype.添加國家 = function(國家名稱, 地區) { var 國家 = new 國家Class(國家名稱, 地區);//創建國家 國家.所屬奧運會 = this; this.國家集合.push(國家);//添加國家到國家集合 this.公告簿 += 國家名稱 + " " + 地區 + " " + "已經加入本屆奧運會\n";;//發布消息 this.公告發布event(this, this.公告簿); //動態移除成員 或者是方法等 // delete this.公告簿; //鏈式編程,進行優化 return this; } 奧運會Class.prototype.添加項目 = function(項目名稱) { var 項目 = new 項目Class(項目名稱);//創建項目 項目.所屬奧運會 = this; this.項目集合.push(項目);//添加項目到國家項目 //發布消息 this.公告簿 += 項目名稱 + " " + "已經加入本屆奧運會" + " Number:" + this.項目集合.length + "\n";//發布消息 this.公告發布event(this, this.公告簿); return this; } 奧運會Class.prototype.添加裁判 = function(名稱, 所屬項目) { var 裁判 = new 裁判Class(名稱);//創建裁判 裁判.所屬奧運會 = this; 裁判.所屬的項目 = 所屬項目; this.裁判集合.push(裁判);//添加裁判到裁判集合 //發布消息 this.公告簿 += 名稱 + " " + "裁判已經加入本屆奧運會" + " Number:" + this.裁判集合.length + "\n"; this.公告發布event(this, this.公告簿); return this; } 奧運會Class.prototype.添加運動員 = function(名稱, 國家) { var 運動員 = new 運動員Class(名稱, 國家);//創建運動員 運動員.所屬奧運會 = this; this.運動員集合.push(運動員);//添加運動員到運動員集合 國家.添加運動員(運動員); //發布消息 this.公告簿 += 名稱 + " " + "加入本屆奧運會" + " Number:" + this.運動員集合.length + "\n"; this.公告發布event(this, this.公告簿); return this; } //國家對象 function 國家Class(國家名稱, 地區) { this.名稱 = 國家名稱; this.地區 = 地區; this.所屬奧運會 = null; this.運動員集合 = new Array(); this.添加運動員 = function(運動員) { this.運動員集合.push(運動員); } } // 運動員對象 function 運動員Class(姓名, 所屬國家) { this.姓名 = 姓名; this.所屬奧運會 = null; this.項目集合 = new Array(); this.所屬國家 = 所屬國家; this.添加項目 = function(項目) { this.項目集合.push(項目); 項目.所屬運動員集合.push(this); } } //裁判對象 function 裁判Class(姓名) { this.姓名 = 姓名; this.所屬奧運會 = null; this.所屬的項目 = null } //項目對象 function 項目Class(名稱) { this.名稱 = 名稱; this.所屬奧運會 = null; this.成績 = ""; this.獎牌 = ""; this.所屬裁判 = null; this.所屬運動員集合 = new Array(); this.設置比賽成績 = function() { } this.淺表克隆 = function() { var clone = new 項目Class(); for (var a in this) { clone[a] = this[a]; } return clone; } this.添加比賽成績 = function(所屬運動員, 成績單) { for (var i = 0; i <= this.所屬運動員集合.length; i++) { if (this.所屬運動員集合[i.toString()].姓名 == 所屬運動員.姓名) { var s = this.所屬運動員集合[i.toString()]; for (var ii = 0; ii <= s.項目集合.length; ii++) { if (s.項目集合[ii.toString()].名稱 == 成績單.名稱) { var ss = s.項目集合[ii.toString()]; s.項目集合[ii.toString()] = 成績單; this.所屬奧運會.公告簿 += 所屬運動員.姓名 + " " + 成績單.名稱 + " " + 成績單.成績 + "\n"; this.所屬奧運會.公告發布event(this, this.所屬奧運會.公告簿); return; } } } } } }
<script src="OOP奧運會.js" type="text/javascript"> </script> <script type="text/javascript"> var 奧運會 = new 奧運會Class("游倫敦,看世界!!!!!!!"); function Button2_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } 奧運會.開幕(); } function Button3_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //依次添加國家地區 /* 奧運會.添加國家("中國", "亞洲"); 奧運會.添加國家("日本", "亞洲"); 奧運會.添加國家("美國", "北美洲"); 奧運會.添加國家("德國", "歐洲"); */ //鏈式編程,可以這樣寫,也可以以上面的方式寫 奧運會.添加國家("中國", "亞洲").添加國家("日本", "亞洲").添加國家("美國", "北美洲").添加國家("德國", "歐洲"); } function Button4_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //添加運動項目 奧運會.添加項目("跳水").添加項目("舉重").添加項目("柔道").添加項目("籃球").添加項目("排球").添加項目("田徑"); } function Button5_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //添加裁判 奧運會.添加裁判("張三").添加裁判("李四").添加裁判("陳三"); //為裁判添加運動項目 var 跳水 = 奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","跳水"); var 張三 = 奧運會.通用查詢(奧運會 ,"裁判集合" ,"姓名","張三"); 跳水.所屬裁判= 張三; 張三.所屬的項目 =跳水; var 舉重 = 奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","舉重"); var 李四 = 奧運會.通用查詢(奧運會 ,"裁判集合" ,"姓名","李四"); 舉重.所屬裁判= 李四; 李四.所屬的項目 =舉重; var 柔道 = 奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","柔道"); var 陳三 = 奧運會.通用查詢(奧運會 ,"裁判集合" ,"姓名","陳三"); 柔道.所屬裁判= 陳三; 陳三.所屬的項目 =柔道; } function Button6_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //創建運動員 var 中國 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "中國"); 奧運會.添加運動員("郭晶晶", 中國); var 日本 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "日本"); 奧運會.添加運動員("小日本田", 日本); var 美國 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "美國"); 奧運會.添加運動員("布迪亞 ", 美國); for (var i = 0; i < 10; i++) { var 中國 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "中國"); 奧運會.添加運動員("郭晶晶"+i, 中國).添加運動員("Z-" + i, 中國).添加運動員("Z-G" + i, 中國); var 日本 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "日本"); 奧運會.添加運動員("小日本田"+i, 日本).添加運動員("R-" + i, 日本).添加運動員("R-B" + i, 日本); var 美國 = 奧運會.通用查詢(奧運會, "國家集合", "名稱", "美國"); 奧運會.添加運動員("布迪亞 "+i, 美國).添加運動員("U-" + i, 美國).添加運動員("U-S" + i, 美國); } } function Button7_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //給運動員分配運動項目 var 中國=奧運會.通用查詢(奧運會 ,"國家集合" ,"名稱","中國"); var 郭晶晶=奧運會.通用查詢(中國 ,"運動員集合" ,"姓名","郭晶晶"); var 跳水 =奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","跳水"); 郭晶晶.添加項目(跳水); var 日本=奧運會.通用查詢(奧運會 ,"國家集合" ,"名稱","日本"); var 小日本田=奧運會.通用查詢(日本 ,"運動員集合" ,"姓名","小日本田"); 小日本田.添加項目(跳水); var 美國=奧運會.通用查詢(奧運會 ,"國家集合" ,"名稱","美國"); var 布迪亞 =奧運會.通用查詢(美國 ,"運動員集合" ,"姓名","布迪亞 "); 布迪亞 .添加項目(跳水); } function Button8_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } //為運動設置成績 var 中國=奧運會.通用查詢(奧運會 ,"國家集合" ,"名稱","中國"); var 郭晶晶=奧運會.通用查詢(中國 ,"運動員集合" ,"姓名","郭晶晶"); var 跳水1 =奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","跳水").淺表克隆(); //先得到要修改數據對象的引用 var 跳水1set =奧運會.通用查詢(郭晶晶 ,"項目集合" ,"名稱","跳水"); 跳水1.成績="99分"; 跳水1set.添加比賽成績(郭晶晶,跳水1); var 日本=奧運會.通用查詢(奧運會 ,"國家集合" ,"名稱","日本"); var 小日本田=奧運會.通用查詢(日本 ,"運動員集合" ,"姓名","小日本田"); var 跳水2 =奧運會.通用查詢(奧運會 ,"項目集合" ,"名稱","跳水").淺表克隆(); var 跳水2set =奧運會.通用查詢(小日本田 ,"項目集合" ,"名稱","跳水"); 跳水2.成績="25分"; 跳水2set.添加比賽成績(小日本田,跳水2); } function Button9_onclick() { //消息發布 奧運會.公告發布event = function (sender, e) { document.getElementById("TextArea1").value = e; } 奧運會.閉幕(); } </script>
具體效果
喜歡的人可以下載看看,體會OOP思想http://files.cnblogs.com/BABLOVE/JSOOP%E5%A5%A5%E8%BF%90%E4%BC%9A.rar