【js学习笔记-055】比较方法

js中比较两个对象时,比较的是引用而不值。要判断两个对象是否引用的是一个对象,不是检查这个对象是否具有相同的属性名和相的属性值,而是直接比较这两个单独的对象是否相等。Java编程语言有很多用于对象比较的方法,将java中的这些方法借用到js中是一个不错的主意,这个方法只能接受一个实参,如果这个实参和调用此方法的对象相等的话则返回true。当然这里所说的“相等”的含义是根据类的上下文来决定的。对一简单的类,可以通过简单地比较它们的constructor属性来确保两个对象是相同类型。然后比较两个对象的实例属性以保证它们的值相等。

如下:给Set添加equals()方法

Set.prototype.equals = function(that){

  if(this===that) return true;

  if(!(that instanceof Set)) return false;

  if(this.size()!=that.size()) return false;

  try{

    this.foreach(function(v){if(!that.contains(v)){throw false;});

    return true;

   }catch(x){

     if(x===false) return false;

    throw x

   }

}

同样道理我们可以定义一个compareTo方法,如给Range类加一个这样的方法

Range.prototype.compareTo = function(that){

  if(!(that instanceof Range)){

      throw new Error("Can't compare a Rangewith"+that);

   }

  var diff = this.from-that.from;

  if(diff==0)diff=this.to-that.to;

  return diff;

}

 

则我们对range对象数组排序可以如:

ranges.sort(function(a,b){return  a.compareTo(b);});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值