使用的jquery框架function Calendar() {
 this.setLocale = function(locale){};

}
$.extend(Calendar.prototype, {
  setLocale : function(locale){}
});这两个setLocale的定义有什么区别吗?

解决方案 »

  1.   

    使用没有区别.第一个是直接在函数/类中定义一个方法. 而第二个是通过extend来进行扩展的方法. 二者表达的意思是一致的.
    甚至可以不用jquey,直接.prototype扩展要说区别的话,在于第一个function定义时, 已经确定了此方法在其中, 而extend是后面临时加入, 可以参照继承来思考这个问题.$.extend的主要用途是用于给jquery对象进行扩展, 对进行对象的方法扩展非常有效.
      

  2.   

    下面的那个用了原型,那不算自己的属性了.
    上面的那个.setLocale是它本身的,
    ========>>>>>>>>>>>不知道这样说对不对.
    楼下的.接着....
      

  3.   

    有区别,第1种定义在每个Calendar()对象中都会有个互相独立的setLocale()方法,如果有:
    var cal1 = new Calendar();
    var cal2 = new Calendar();
    //下面对 cal1 的 setLocale() 重新定义
    cal1.setLocale = function() {alert('cal1');}cal1.setLocale(locale); // 会执行 alert('cal1');
    cal2.setLocale(locale); // 仍会执行原来定义的 function(locale){};
    // 这种方式定义的方法,实例之间的方法是互相独立,每个实例中都有自己定义的 setLocale()
     
    而对第2种function Calendar() {
     .....
    }var cal1 = new Calendar();
    var cal2 = new Calendar();$.extend(Calendar.prototype, {
      setLocale : function(locale){alert(new Date());}
    });// 基于原型的方式定义的方法,对所有该类型的实例,是共享的。
    // 由于是修改的原型,则这个方法会对所有 Calendar() 立刻有效, 即:
    cal1.setLocale(locale); // 会执行 alert(new Date());
    cal2.setLocale(locale); // 也会执行重新定义的 alert(new Date());