2012-08-22 49 views
0

我正在尝试为动态下拉菜单编写脚本,以此学习OOP javascript和jQuery。您可以在www.industrialMerchants.com/industrialMerchants处看到虚拟网站。脚本可以在www.industrialMerchants.com/industrialMerchants/javascript/horizontalDropMenu2.js

该脚本首先定义了一些对象,之后我有一个$(document).ready()封闭器,用于启动将相关jQuery对象和DOM元素封装到我的对象模型中的过程。

的问题是,当我加载作为一个虚拟网站的静态html文件,萤火虫给我下面的错误:

"TypeError: jqObject is undefined." 

错误指向以下功能的第五行。

function Menu(jqObject) { 
    self = this; 
    this.self = jqObject; 
    this.submenus = (function(){ 
     jqObject.children().children("ul").each(function() { <<--- Error 
      submenu = new Submenu($(this), self); 
      submenus.push(submenu); 
      return submenus; 
     }); 
    }()); 
} 

调用该函数的线条在这里:

$(document).ready(function(){ 
    menus = new Array(); 
    $("ul.horizontalDropMenu").each(function(){ 
     menu = new Menu($(this)); 
     menus.push(menu); 
    }); 
}); 

正如你所看到的,在调用Menu()对象构造包括作为参数传递给一个jQuery对象的引用,使jqObject明确被定义为。那么是什么给了?

当我从$(document).ready()声明开始的代码中插入断点时,执行完全跳过它,并从函数声明本身开始。就好像浏览器正在尝试执行函数声明,然后进行任何明确的调用。

+2

你为什么要设置'this.this'? – Blender

+1

不知道发生了什么,但你几乎肯定应该用'var'声明“self”。与其他功能中的“菜单”和“菜单”一样。 – Pointy

+1

Blender在哪里看到? –

回答

3

设置一个断点,并去调用堆栈给了我这条线(外.ready - 但是,这并不重要):

Submenu.prototype = new Menu(); 

你正在创建一个菜单实例没有一个jQuery对象,但改为undefined

+1

'Submenu.prototype = Object.create(Menu.prototype);'为修复。 –

+0

不幸的是,修复只是暴露了更多的问题。有时间回到制图板。我显然不太了解OOP JavaScript。 –

相关问题