上次我們談到Javascript 中 淺拷貝與深拷貝的實(shí)現(xiàn).. 這回我們看看如何實(shí)現(xiàn)判斷兩個(gè)對(duì)像的內(nèi)容是否相等。 這里有一個(gè)克隆結(jié)果原則是針對(duì)Java語(yǔ)言的,當(dāng)然JavaScript也可以勝任。
克隆滿足的條件 clone()方法將對(duì)象復(fù)制了一份并返還給調(diào)用者。所謂“復(fù)制”的含義與clone()方法是怎么實(shí)現(xiàn)的有關(guān)。一般而言,clone()方法滿足以下的描述:
第一、對(duì)任何的對(duì)象x,都有:x.clone() != x;換言之,克隆對(duì)象與原對(duì)象不是同一個(gè)對(duì)象。
第二、對(duì)任何的對(duì)象x,都有:x.clone().getClass == x.getClass(),換言之,克隆對(duì)象與原對(duì)象的類型一樣;在Javascript getClass 就相當(dāng)于constructor。
第三、如果對(duì)象x的equals()方法是定義恰當(dāng)?shù)脑,那?x.clone().equals(x)也應(yīng)當(dāng)是成立的。
在Java語(yǔ)言的API中,凡是提供了clone()方法的類,都滿足上面的這些這些條件。Java語(yǔ)言的設(shè)計(jì)師在設(shè)計(jì)自己的clone()方法是,也應(yīng)當(dāng)遵守這三個(gè)條件。 第三條為可選,不必強(qiáng)制實(shí)現(xiàn)的,意思是說(shuō)只要編制得當(dāng),也可以實(shí)現(xiàn)。 我們還拿上次的例子看一下: 運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
其它對(duì)像的equals 方法的樣例: 后面一個(gè),我重定義了 Boolean 構(gòu)造函數(shù),并實(shí)現(xiàn)了它的toStirng()方法。 可以瞅瞅。 運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
出處:藍(lán)色理想
責(zé)任編輯:panliu888
◎進(jìn)入論壇網(wǎng)頁(yè)制作、網(wǎng)站綜合版塊參加討論
|