function Plugin( element, options ) {
        this.options = $.extend( {}, defaults, options );
        this.element = $(element);
        this._defaults = defaults;
        this._name = pluginName;
       // this.tagType = ':checkbox', ':radio','select';
        this.stackiSelect = $();
        this.stackiCheckbox = $();
        this.stackiRadio = $();
        this.init();
    }    Plugin.prototype = {
        init: function() {
            var fm = this;
            this.identify(this.element,'select',this.stackiSelect);
            console.log(this.stackiSelect);//undefined ??
            this.stackiSelect.each(function(index, domEle) {
               //.........  
            });
        },
        /*identify the tagType ,and take the tag for transform to the stack */
        identify: function(object,tagType,stack) {
            object.each(function() {
              var self = $(this);
              stack = self.is(tagType) ? stack.add(self) : stack.add(self.find(tagType));//identify 
            });
        }
    }
(写成插件的...)从选择器选择的中筛出checkbox radio select ,然后美化下..定义了三个容器stackiSelect 
stackiCheckbox stackiRadio 作为构造函数的属性,然后我想重用原型里的写的identify()但是调用后没用为空.
如果这样是可以的:
        identify: function(object,tagType) {
            var fm = this;
            object.each(function() {
              var self = $(this);
              fm.stackiCheckbox  = self.is(tagType) ? fm.stackiCheckbox .add(self) :fm.stackiCheckbox         .add(self.find(tagType));//identify 
            });
        }不明白啊,为什么把属性作为形参不改变呢?求解.!!谢谢啦

解决方案 »

  1.   

    属性有可比较性?a 的name='abc'和img 的name='abc'
      

  2.   

    这个是因为js的传参和赋值都是引用传递,传参和赋值是一样的道理,且看下面的demo:
    var a = 'this is a!';
    var b = a;  //把a赋值给b,a和b现在都指向同一个字符串
    b = 'another!'; //试图给b赋值,想达到改变a的值的目的
    alert(a); //this is a,但是a还是没改变var a = {key:'this is a!'};
    var b = a;  //把a赋值给b,这时a和b指向同一个对象
    b.key = 'another!'; //试图给b的某个属性赋值
    alert(a.key); //another,a的这个属性也改变了,其实a和b就是指向同一份内容
      

  3.   


    {
     identify: function(object,tagType,stack) {
                object.each(function() {
                  var self = $(this);
                  stack = self.is(tagType) ? stack.add(self) : stack.add(self.find(tagType));//identify 
                });
            }
    }identify的第三个参数stack,试图通过赋值来改变实参的值,是做不到的。一种方法是通过返回值:
    stack = context.identify(object,tagType,stack);
    在identify内部把新的stack return回来,调用的时候重新赋值给stack。
    还有就是使用改变属性的方式来改变实参的属性。