• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> ASP开发 >> ASP基础 >> 详细内容
 

推荐文章

  • ASP的100个必须掌握的基础
 
 

热点文章

  • ASP的100个必须掌握的基础
  • ASP初级三——ASP实例讲解
  • ASP中级三--Ajax入门讲座记录
  • ASP入门及提高
  • ASP初级一——入门及总结
  • asp学习入门经验谈
  • ASP中级一——正则表达式讲座记录
  • ASP中级二--ORM讲座记录
  • 精华asp代码收集
  • ASP编程常用的代码
  • 基于服务器的 web代理 源代码
  • AspJpeg的使用介绍
 
 

相关文章

  • Global.asa文件的使用及Chat程序
  • ASP内建对象Application 和 Session
  • ASP内建对象Response
  • ASP内建对象Request
  • ASP脚本循环语句
  • ASP脚本变量、函数、过程和条件语句
  • ASP脚本基础
  • ASP基础
  • ASP简介
  • Are you ready?
  • ASP技术
  • VBScript 编码约定
 
 

百度搜索

 
 

Javascript 中对像 equals 方法的实现

  • 阅览次数:
  • 文章来源: 网贝整理
  • 原文作者: 八神奄
  • 整理日期: 2006-10-03
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

上次 我们谈到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()方法是,也应当遵守这三个条件。
第三条为可选,不必强制实现的,意思是说只要编制得当,也可以实现.
1. 我们还拿上次的列子看一下:


<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>

 


 

上一篇:asp学习入门经验谈
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号