我说“类”因为JS在技术上并不存在。但这是我的简化课程
function clsDragStack(divWithin,divConstrain,arrOptions){
var _divWithin,_divCont,_divOption,_arrOptions;
var _sourceStack=[]; // array to hold jQuery items referencing remaining source items. initally ALL items will be in this array.
var _selectStack=[]; // array to hold jQuery items referencing items the user has selected.
//start constructor
_divWithin=divWithin;
_arrOptions=arrOptions;
_divCont = $('div[ID^="divContainer"]',divWithin);
_divOption = $('div[ID^="divOption"]',divWithin);;
initDraggables(divConstrain);
//end constructor
function initDraggables(divConstrain){
var divDraggables = $(".draggableBasic",_divCont); //get all the draggable divs
divDraggables.each(function(i){_sourceStack.push($(this));}); //add all the children to sourcestack
};
clsDragStack.prototype.selected = function (){
return _selectStack;
};
};
这可能不会孤立地做任何有用的事情,但它显示了感兴趣的部分。基本上我左边有一个列(由_sourceStack在类中表示)用户可以将项目从这里拖到另一列(由_selectStack表示)。这一切都运行正常,_sourceStack和_selectStack数组很快就被洗牌了。但是,当我尝试使用...
从类外部访问_selectStack的内容时 var arrFields=selectStack.selected();
...例如 - 我似乎总是得到原始堆栈,即空。如果我尝试以与获取原始完整列表相同的方式访问_sourceStack,就好像没有项目被移动一样。当我移动项目时,我可以看到_sourceStack和_selectStack被修改。
在传递 之前,是否需要在selected()中复制数组?为什么我似乎无法传递对此对象的引用?我已经用简单的字符串数组做了一个实验,它运行正常。是因为这些是jQuery对象的数组吗?
答案 0 :(得分:0)
我见过的所有代码都定义了函数之外的原型成员,例如:
function clsDragStack(divWithin,divConstrain,arrOptions){
this._selectStack=[];
//...
};
clsDragStack.prototype = {
selected: function() {
return this._selectStack;
}
};
数组中包含的无关紧要。
使用您的代码,每次创建新的clsDragStack
对象时,原型函数selected
都会更改为返回最新生成的对象的_selectStack
。因此,每个现有的对象都将返回新的(空)数组。
答案 1 :(得分:0)
确定。这就是我做到的。我换了......
clsDragStack.prototype.selected = function (){
return _selectStack;
};
...与
return {
selected : function(){
return _selectStack;
}
};
..仍然在班级的主体内。
如果有人能向我解释这里到底发生了什么,我将非常感激!特别是这个return {name: function(){}};
结构是什么 - 以及为什么在我的原始实现中它返回原始数组,即使它已经被修改了?