读书人

原形里面方法形参传构造函数的属性但

发布时间: 2013-08-16 14:29:57 作者: rapoo

原型里面方法形参传构造函数的属性,但值没变??求解!


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
});
}

不明白啊,为什么把属性作为形参不改变呢?求解.!!谢谢啦
[解决办法]
属性有可比较性?a 的name='abc'和img 的name='abc'
[解决办法]
这个是因为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就是指向同一份内容



[解决办法]

{
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。
还有就是使用改变属性的方式来改变实参的属性。

读书人网 >JavaScript

热点推荐