背景:我正在尝试编辑 zen 购物车水平弹出菜单,以使弹出菜单在菜单内内联打开。我遇到的问题是我很难理解它附带的 javascript/jquery。
在不发布整个内容的情况下,代码的结构是这样的:
(declare some vars)
//some functions like this:
function funcname(obj) {
//do something
}
//then one big master function like this:
function bigfunc(arg1, arg2, arg3, arg4, arg5) {
//declare some vars based on this
this.varname1=varname1;
this.varname2=varname2;
//declare some functions inside the big function
this.innerfunc1= function() {
//do stuff
}
this.innerfunc2= function() {
//do stuff
}
}//end of big function
//then goes on to declare init function
function initfunc(){
//this creates new bigfunc(arg1 arg2 arg3...) for each main menu item
}
//finally calls init function with
window.onload = initfunc();
现在开始我的困惑 -
1)首先为了澄清,我是否正确地基于所有 this 在 bigfunc() 中浮动以及它被 new bigfunc() 调用的事实是 this 正在创建一个对象?
2)我目前的问题是 bigfunc() 中的一个函数,如下所示:
this.slideChildMenu = function() {
var divref = this.children[0].div;
var ulref = this.children[0].ul;
var maxwidth = this.children[0].width;
var nextWidth;
if (this.isMouseOnMe || this.isMouseOnChild()) {
nextWidth = divref.offsetWidth + slideSpeed_out;
if (nextWidth >= maxwidth) {
this.finishOpeningChild(divref, ulref, maxwidth);
} else {
ulref.style.left = nextWidth - maxwidth + "px";
divref.style.width = nextWidth + "px";
setTimeout("slideChildMenu('" + this.getId() + "')", slideTimeout_out);
}
}
现在我的计划是改变它以使用 jquery show 打开元素所以我尝试了这个:
this.slideChildMenu = function() {
var divref = this.children[0].div;
var ulref = this.children[0].ul;
if (this.isMouseOnMe || this.isMouseOnChild()) {
$(divref).show(function(){
this.finishOpeningChild(divref, ulref);
});
}
}
但我得到这个-> TypeError: this.finishOpeningChild is not a function
现在,这个 js 中还有很多其他的东西,所以我不会梦想在这里请人为我做我的工作,但我希望如果有人能向我解释为什么这个函数不是我可能的函数能够解决剩下的问题。
注意:我认为这与“this”的范围有关,但在两个版本的代码中 this 的值似乎完全相同。
我知道这很长,但非常感谢您的帮助。