var Class = function(subclass){
    var fn =  function(){
        if(subclass._init && typeof subclass._init == 'function'){
            this._init.apply(this,arguments);
        }
    }
    if(typeof subclass == 'object'){
        fn.prototype = subclass;
    }
    return fn;
}
var Test = new Class({
options:{
a:1,
b:"x"
},
_init:function(options){
jQuery.extend(this.options,options);
}
});
var p1 = new Test({a:3});
var p2 = new Test({b:"ff"});
alert(p2.options.a)弹出3,我的原意是弹出1,因为p2应该是个新的实例,为什么会把p1.options继承下来?
用的是jquery框架,为了使用jQuery.extend方法。
怎么改Class才能让p1和p2互不干扰?

解决方案 »

  1.   

    jQuery.extend(jQuery.extend({},this.options),options);
      

  2.   


    jQuery.extend({},this.options,options);
      

  3.   

    兄弟,不对。alert(p2.options.b)应该出ff,而现在是x
      

  4.   

    this.options = jQuery.extend({}, this.options,options);
      

  5.   

        _init:function(options){
         this.options = jQuery.extend(jQuery.extend({}, this.options), options);
            //jQuery.extend(this.options,options);
        }
      

  6.   

    学习下,看了JQUERY API贴下返回值:ObjectjQuery.extend([deep], target, object1, [objectN]) 用一个或多个其他对象来扩展一个对象,返回被扩展的对象。
    如果不指定target,则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。 
    如果第一个参数设置为true,则jQuery返回一个深层次的副本,递归地复制找到的任何对象。否则的话,副本会与原对象共享结构。 
    为定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。deep (可选)Object如果设为true,则递归合并。
    targetObject待修改对象。
    object1Object待合并到第一个对象的对象。
    objectN (可选)Object待合并到第一个对象的对象。
      

  7.   

    _init:function(options){this.options= jQuery.extend(jQuery.extend({},this.options), options);//jQuery.extend(this.options,options);    }