亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript的Prototype實現

2024-09-06 12:40:45
字體:
來源:轉載
供稿:網友

模式:

    Prototype(原始模型模式或者原型模式)
定義:
    通過給出一個原型對象來指明所要創建的對象的類型,然后用這個原型對象的方法創建出更多同類型的對象,原始模型模式屬于對象的創建模式
 
javascript實現:
    在Java語言中對象都繼承自java.lang.Object,而java.lang.Object就提供了Clone的方法,只要實現接口Cloneable,即表示支持Clone,否則拋出異常。在這點javascript是非常接近的,所有的對象都是從Object繼承,不過Object并不支持Clone的方法,但是我們可以通過自己對于javascript通過expanddo的形式實現Clone方法,這樣日后所有的對象創建都實現了Clone方法。
 
    因為javascript本身沒有提供Clone的方法,同時對于對象的賦值如var a=new Object();var b=a,這樣的代碼a,b是指向同一對象的,要創建一個對象必須通過new 這個關鍵字來實現,因此在Clone的實現過程,我內部定義了一個構造子(constructor)CloneModel,同時指定其父對象為要進行Clone活動本身的對象,因此使用了 this關鍵字,在我們定義的構造子CloneModel的基礎上我們創建一個一個對象,因為構造子內部沒有任何代碼,新創建的對象實際上說所有的實現都在父對象中,也就是我們需要進行Clone的對象。到目前為止,我們已經創建了一個需要復制的對象,但是所有的值都是指向父對象的。
 
    在 javascript的面向對象方式中,我們曾經討論過,如果沒有覆蓋父對象的值,那么這個時候是直接指向父對象的,在Prototype Pattern是要求Clone之后的對象的內部值是不應該相關的,而只要賦值一次,objClone的值都會在自己的內存空間里頭,而不是還指向父對象?;谌绱说目紤], objClone[v]=objClone[v];語句就是實現將父對象的值通過覆蓋的方式拷貝到自己的內存來。(這里提及的內存應該是邏輯意義上的)
 
    深復制的實現
    在完成上述工作之后,只是實現了淺復制,對象方面依然是指向對象的引用,這個時候可以通過調用指向對象的Clone方法得到cloned對象的屬性對象(因為不知道如何說了)。 objClone[v]=objClone[v].Clone(); 這句代碼就是完成如此的功能。

Clone方法的實現
////////////////////////////////////////////////////////////////////////為Object添加Clone的方法,因為所有的對象的頂級對象都是Object//因此所有用戶自定義對象都實現了Clone的方法//////////////////////////////////////////////////////////////////////Object.prototype.Clone=function(){ function CloneModel(){   } CloneModel.prototype=this; var objClone=new  CloneModel();  var strMsg=""; for( v in objClone){   switch (typeof objClone[v]){   case "function":    //如果是方法,不需要進行clone    break;   case "object":   ///////////////////////////////////////////////////////////////////////   //如果是對象,采用Clone重新得到,這樣做的目的在于能夠進行深度Clone   //因為javascript是一個Object Based的語言,不然內部對象是指向原來的引用   ///////////////////////////////////////////////////////////////////////    objClone[v]=objClone[v].Clone();    break;   default:   ///////////////////////////////////////////////////////////////////////   //其余數據類型情況下全部重新賦值   //這樣做的目的就是保證數值在內存中的存放是在新對象的空間中   //而不僅僅指向Parent Object的一個refrence   ///////////////////////////////////////////////////////////////////////    objClone[v]=objClone[v];  }    } return objClone;}
 
對象類的定義

function BookInfo(vCaption){ this.Caption=vCaption;  var curPage=0; this.setPage=function(vData){  curPage=vData; } this.getPage=function(){  return curPage; } }
 
測試代碼

////////////////////////////////////test BookInfo 's clone method////////////////////////////////////function test(){ var objTest=new BookInfo("javascript Prototype Pattern"); objTest.setPage(1000);  objTest.Author="Ruhong.Liu"; //object expanddo  ShowObject(objTest,"原始對象"); //Clone Object from objTest var objCloned=objTest.Clone(); ShowObject(objCloned,"Clone之后的對象");  //if you changed the objTest's caption //you can find objCloned's caption has be changed objTest.Caption="Changed Base Object"; //show message ShowObject(objTest,"修改Caption之后的原始對象"); ShowObject(objCloned,"修改Caption之后的clone對象");  /* //----------這段代碼可以不工作------------------------// //now you can change objCloned's caption objCloned.Caption="hello,Jeff.Yan"; //show message ShowObject(objTest,"Clone對象Caption修改之后的原始對象"); ShowObject(objCloned,"Clone對象Caption修改以后");*/ }function ShowObject(o,vCaption){ var strMsg=vCaption +""; strMsg+="CurrentPage:        " + o.getPage() +""; strMsg+="Caption:         " + o.Caption +""; strMsg+="Expanddo Property Author:       " + o.Author; alert(strMsg);}

 
 
結束語:
    按照我目前的理解和測試,我覺得prototype關鍵字不是prototype模式的實現,這點通過parent object可以得到驗證。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
7777免费精品视频| 中文字幕日韩欧美| 亚洲色图欧美制服丝袜另类第一页| 57pao成人国产永久免费| 欧美精品一区二区免费| 91精品国产91| 91理论片午午论夜理片久久| 国语自产偷拍精品视频偷| 俺去了亚洲欧美日韩| 日韩欧美有码在线| 久久夜色精品亚洲噜噜国产mv| 色视频www在线播放国产成人| 日本精品久久久久影院| 国产精品美乳在线观看| 亚洲激情自拍图| 超碰91人人草人人干| 这里只有精品在线播放| 欧美日韩国产第一页| 久久久精品电影| 国产一区二区三区视频免费| 日韩中文字幕网站| 97精品视频在线| 国产人妖伪娘一区91| 97免费中文视频在线观看| 一区二区在线视频播放| 高清欧美性猛交xxxx黑人猛交| 国产精品直播网红| 奇门遁甲1982国语版免费观看高清| 国产精品中文字幕在线观看| 国产在线播放不卡| 国产精品自产拍在线观| 国产福利视频一区| 国产精品黄色av| 亚洲男人av在线| 成人国产精品av| 欧美性猛交xxxxx免费看| 国产美女91呻吟求| 啊v视频在线一区二区三区| 欧美黄色www| 国产精品久久久久久久av电影| 国产精品视频免费在线观看| 欧洲美女免费图片一区| 国产精品99久久99久久久二8| 亚洲性日韩精品一区二区| 一区二区三区国产视频| 国产日韩av在线| 欧美一区二粉嫩精品国产一线天| 国产精品欧美日韩一区二区| 欧美日韩国产区| 久久深夜福利免费观看| 久久不射热爱视频精品| 欧美又大又粗又长| 中文字幕亚洲在线| 日韩中文字幕在线免费观看| 97热在线精品视频在线观看| 久久国产精品网站| 国产一级揄自揄精品视频| 国产精品国语对白| 日韩一区视频在线| 91精品国产综合久久香蕉最新版| 亚洲欧美国产精品va在线观看| 影音先锋日韩有码| 久久精品电影一区二区| 中文字幕亚洲在线| 久久久久久久网站| 啪一啪鲁一鲁2019在线视频| 日韩欧美第一页| 中文字幕在线成人| 欧美精品videosex牲欧美| 久久久99免费视频| 亚洲欧美日本另类| 伊人精品在线观看| 亚洲国语精品自产拍在线观看| 国产欧美日韩最新| 91精品国产91| 国产日韩欧美黄色| 红桃视频成人在线观看| 亚洲精品中文字幕有码专区| 国产91精品最新在线播放| 精品无码久久久久久国产| 国产精品一区专区欧美日韩| 久久久精品2019中文字幕神马| 精品久久久久久国产91| 亚洲欧美中文字幕| 亚洲视频在线看| 久久夜色精品国产亚洲aⅴ| 亚洲国语精品自产拍在线观看| 国产成人免费av电影| 欧美重口另类videos人妖| 国产成人精品av| 久久在线免费观看视频| 国产精品第一第二| 一区二区三区视频观看| 日韩精品极品在线观看| 欧美视频不卡中文| 色综合久久久久久中文网| 国产亚洲精品久久久久久| 欧美黑人又粗大| 国产精品96久久久久久又黄又硬| 国内揄拍国内精品少妇国语| 欧美黑人巨大xxx极品| 亚洲欧美日韩天堂| 精品久久久久久久久久国产| 日韩在线观看网站| 日韩av在线网页| 精品偷拍各种wc美女嘘嘘| 福利二区91精品bt7086| 国产精品女人久久久久久| 日韩欧美第一页| 成人亚洲欧美一区二区三区| 国产一区二区三区在线观看视频| 亚洲片在线资源| 一区二区三区久久精品| 亚洲free性xxxx护士hd| 亚洲精品成人久久电影| 欧美日韩成人网| 亚洲国产精品久久久久秋霞不卡| 97超碰蝌蚪网人人做人人爽| 国产美女精品免费电影| 亚洲午夜av电影| 欧美视频第一页| 亚洲欧美日韩网| 69国产精品成人在线播放| 国产精品高潮呻吟久久av黑人| 国产一区二区三区高清在线观看| 欧美精品做受xxx性少妇| 91久久久久久国产精品| 中文字幕免费国产精品| 欧美超级乱淫片喷水| 欧美极度另类性三渗透| 国产一区二区视频在线观看| 欧美视频在线免费看| 国产免费一区二区三区香蕉精| 亚洲三级免费看| 日韩精品视频免费专区在线播放| 国产香蕉精品视频一区二区三区| 国产日韩av在线| 91精品国产高清自在线看超| 国产在线视频2019最新视频| www国产精品视频| 在线观看免费高清视频97| 国产精品一区二区久久久| 日本精品视频在线观看| 久久福利视频导航| 91美女片黄在线观看游戏| 欧美成人免费全部| 欧美床上激情在线观看| 亚洲色图欧美制服丝袜另类第一页| 国产精品偷伦免费视频观看的| 欧美日韩免费在线| 91亚洲一区精品| 亚洲三级黄色在线观看| 91综合免费在线| 69视频在线播放| 欧美精品做受xxx性少妇| 中文字幕视频在线免费欧美日韩综合在线看| www.亚洲人.com| 欧美日韩国产第一页| 国产97色在线| 精品日本高清在线播放| 欧美激情在线一区| 在线播放精品一区二区三区| 国产精品三级久久久久久电影| 亚洲激情 国产|