人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

JS 中對象equals辦法的完成

JS 中對象equals辦法的完成

更新時間:2020-12-07 文章作者:未知 信息來源:網絡 閱讀次數:


上次我們談到Javascript 中 淺拷貝與深拷貝的實現..
這回我們看看如何實現判斷兩個對像的內容是否相等。
這里有一個克隆結果原則是針對Java語言的,當然JavaScript也可以勝任。克隆滿足的條件
clone()方法將對象復制了一份并返還給調用者。所謂“復制”的含義與clone()方法是怎么實現的有關。一般而言,clone()方法滿足以下的描述:

第一、對任何的對象x,都有:x.clone() != x;換言之,克隆對象與原對象不是同一個對象。

第二、對任何的對象x,都有:x.clone().getClass == x.getClass(),換言之,克隆對象與原對象的類型一樣;在Javascript getClass 就相當于constructor。

第三、如果對象x的equals()方法是定義恰當的話,那么 x.clone().equals(x)也應當是成立的。

在Java語言的API中,凡是提供了clone()方法的類,都滿足上面的這些這些條件。Java語言的設計師在設計自己的clone()方法是,也應當遵守這三個條件。
第三條為可選,不必強制實現的,意思是說只要編制得當,也可以實現。
我們還拿上次的例子看一下:
運行代碼框
<HTML><HEAD><TITLE> New Document </TITLE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><META NAME="Generator" CONTENT="Wawa Editor 1.0"><META NAME="Author" CONTENT="八神奄"><META NAME="Keywords" CONTENT="Javascript,Java,XML,XSLT,ASP,VBScript,ASP .net,C#,C++,Database"><META NAME="Description" CONTENT="不及格的程序員,無所不在"></HEAD><BODY><SCRIPT LANGUAGE="JavaScript"><!--function Object.prototype.equals(obj){if(this == obj)return true;if(typeof(obj)=="undefined"
obj==null
typeof(obj)!="object")return false;var length = 0; var length1=0;for(var ele in this) length++;for(var ele in obj) length1++;if(length!=length1) return false;if(obj.constructor==this.constructor){for(var ele in this){if(typeof(this[ele])=="object") {if(!this[ele].equals(obj[ele]))return false;}else if(typeof(this[ele])=="function"){if(!this[ele].toString().equals(obj[ele].toString())) return false;}else if(this[ele]!=obj[ele]) return false;}return true;}return false;}function String.prototype.equals(str){if(this==str)return true;return false;}function Function.prototype.equals(func){if(this.toString().equals(func.toString()))return true;return false;}function Boolean.prototype.equals(bool){if(this==bool)return true;if (bool instanceof Boolean){ return this.toString().equals(bool.toString());} return false;}function Object.prototype.clone(){var newObj = new Object();for(elements in this){newObj[elements] = this[elements];}return newObj;}function Object.prototype.cloneAll(){function clonePrototype(){}clonePrototype.prototype = this;var obj = new clonePrototype();for(var ele in obj){if(typeof(obj[ele])=="object") obj[ele] = obj[ele].cloneAll();}return obj;}var obj1= new Object();obj1.Team= "First";obj1.Powers= new Array("Iori","Kyo");obj1.msg= function(){alert()};obj1.winner= new Object();obj1.winner.name= obj1.Powers[0];obj1.winner.age= 23;obj1.winner.from= "Japan"var obj1_clone= obj1.cloneAll();alert("剛剛克隆之后,對比結果為: "+obj1_clone.equals(obj1))obj1_clone.Team= "Second";obj1_clone.Powers= new Array("Jimmy","Anndy");obj1_clone.winner.name= obj1_clone.Powers[1];obj1_clone.winner.age= 22;obj1_clone.winner.from= "USA";alert("修改過被克隆對像屬性之后的對比結果: "+obj1_clone.equals(obj1))alert("是否符合上面提到的第二條原則呢,結果為: "+(obj1_clone.constructor==obj1.constructor))msg = "2003界拳皇單打獨斗杯,拳皇挑戰賽: \n\n A組 對戰形式:\n\n"msg += obj1.Team+" 組 ,人員名單:"+obj1.Powers+"\n";msg += "第一輪過后,勝利者為:"+obj1.winner.name +" ,參賽者年齡:"+obj1.winner.age+" ,來自島國: "+obj1.winner.from+"\n";msg += "\n\n B組 對戰形式:\n\n"msg += obj1_clone.Team+" 組 ,人員名單:"+obj1_clone.Powers+"\n";msg += "第一輪過后,勝利者為:"+obj1_clone.winner.name +" ,參賽者年齡:"+obj1_clone.winner.age+" ,來自國際警察部隊: "+obj1_clone.winner.from+"\n";alert(msg);//--></SCRIPT></BODY></HTML>
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]其它對像的equals 方法的樣例:
后面一個,我重定義了 Boolean 構造函數,并實現了它的toStirng()方法。
可以瞅瞅。
運行代碼框
<HTML><HEAD><TITLE> New Document </TITLE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><META NAME="Generator" CONTENT="Wawa Editor 1.0"><META NAME="Author" CONTENT="八神奄"><META NAME="Keywords" CONTENT="Javascript,Java,XML,XSLT,ASP,VBScript,ASP .net,C#,C++,Database"><META NAME="Description" CONTENT="不及格的程序員,無所不在"></HEAD><BODY>var a = new Object(); a.arr = new Array("a","b","c");a.name="a"; a.alert = function(){alert()}<br>var b = new Object(); b.arr = new Array("a","b"); b.name="a"; b.alert = function(){}<br>var str = new String("abc");<br>var str_1 = "abc";<br>var str_2 = "abd";<br>var c = a;<br>var d = b;<br><SCRIPT LANGUAGE="JavaScript"><!--function Object.prototype.equals(obj){if(this == obj)return true;if(typeof(obj)=="undefined"
obj==null
typeof(obj)!="object")return false;var length = 0; var length1=0;for(var ele in this) length++;for(var ele in obj) length1++;if(length!=length1) return false;if(obj.constructor==this.constructor){for(var ele in this){if(typeof(this[ele])=="object") {if(!this[ele].equals(obj[ele]))return false;}else if(typeof(this[ele])=="function"){if(!this[ele].toString().equals(obj[ele].toString())) return false;}else if(this[ele]!=obj[ele]) return false;}return true;}return false;}function String.prototype.equals(str){if(this==str)return true;return false;}function Function.prototype.equals(func){if(this.toString().equals(func.toString()))return true;return false;}function Boolean.prototype.equals(bool){if(this==bool)return true;if (bool instanceof Boolean){ return this.toString().equals(bool.toString());} return false;}var a = new Object();a.arr = new Array("a","b","c");a.name="a"; a.alert = function(){alert()}var b = new Object(); b.arr = new Array("a","b");b.name="a";b.alert=function(){}var str = new String("abc");var str_1 = "abc";var str_2 = "abc";var c = a;var d = b;alert(" a.equals(b): "+a.equals(b)+"\n\n str.equals(str_1): "+str.equals(str_1)+"\n\n str_1.equals(str_2): "+str_1.equals(str_2)+"\n\n c.equals(a): "+a.equals(c)+"\n\n d.equals(b) : "+b.equals(d)+"\n\n a.alert.equals(b.alert): "+a.alert.equals(b.alert))</SCRIPT><SCRIPT LANGUAGE="JavaScript">function Boolean(booleans){if(typeof(booleans)=="undefined"){this.value = false;return this;}else{if(booleans==null){this.value = false;return this;}if(booleans==""){this.value = false;return this;}if(!isNaN(booleans)){if(booleans<=0){this.value = false;}else{this.value = true;}return this;}if(booleans!="true"){this.value = false;return this;}else{this.value = true;return this;}}} function Boolean.prototype.toString(){ return this.value ? "true" : "false" } document.writeln("兩個布爾型對像的比較結果:new Boolean().equeals(new Boolean(\"true\")): "+(new Boolean().equals(new Boolean("true"))));</SCRIPT></BODY></HTML>
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 腾冲县| 柏乡县| 阆中市| 富平县| 鹰潭市| 潼关县| 洛浦县| 宜兰县| 乐至县| 嵩明县| 雷州市| 龙海市| 南开区| 罗城| 平江县| 贵溪市| 县级市| 鹤庆县| 平度市| 津南区| 休宁县| 简阳市| 汽车| 马鞍山市| 合川市| 镇远县| 西盟| 新干县| 涪陵区| 衡山县| 万山特区| 屏南县| 奉新县| 界首市| 天气| 竹北市| 中方县| 胶州市| 沙雅县| 齐齐哈尔市| 图木舒克市|