【发布时间】:2011-09-12 11:21:53
【问题描述】:
随着我对 JS 的了解越来越深入,我已经从程序风格转向了半 OO(别问我这是什么意思:基本上是一团糟!)但现在我想开始使用它适当地。 OO 吸引了我的编码大脑。
但是,我正在尝试开发一个学校周图书馆,但我不确定我最好如何去做。
如果我只是简单地使用一个星期数组,它们看起来像这样:
WeeksArray[36].StartDate = "2011-09-05";
WeeksArray[36].EndDateSchool = "2011-09-09";
WeeksArray[36].EndDateProper = "2011-09-11";
WeeksArray[36].JSDate = new Date ( 2011, 8, 05 );
WeeksArray[36].Type = "1";
WeeksArray[36].Label = "Week 36: 5th Sept 2011";
- 键:根据校历的周数
- StartDate / EndDate:与 MySQL 兼容的日期范围
- JSDate:一周开始的 JS 日期对象
- 类型:学校时间表,第 1 周或第 2 周
- 标签:指示一周开始的人类可读标签
我希望其他脚本可以访问此库,以便它们可以加载包含学校日历中所有周的数组或对象。例如,我会想象我的一个脚本会根据这些信息生成一个下拉菜单,其中显示“第 36 周:2011 年 9 月 5 日”,然后单击时向我的 PHP 脚本和 SQL 数据库发送请求,然后过滤信息相应地出现在屏幕上。 注意:后者的实施我不需要帮助,这只是上下文的示例。
我开始编码如下:
var LEAP = {}
LEAP.Schedule = {
init: function() {
this.setWeeks();
}
setWeeks: function() {
var WeeksArray = [];
但越看越觉得不正确!
我是否应该创建“Week”对象,然后为它们创建一个容器,该容器具有返回所有 Week 对象的方法?我一直在阅读 John Resig 的“Pro JavaScript Techniques”中的 OOP 章节,但说实话我并不完全理解它。这感觉是正确的方法,但是对象中的对象让我很头疼。
最终结果应该是我将这个脚本包含在我的一个页面上,然后可以使用var WeeksArray = LEAP.Schedule.getWeeks(); 之类的东西,但即便如此我也不确定这是否现实?
我很困惑……! :D 对此主题的任何帮助将不胜感激。
【问题讨论】:
-
我认为您可能拥有 Weeks 对象,但您不需要直接设置这么多属性。所有与日期相关的都应该从您传递的任何日期推断出来。
-
我同意 Rob W 的做法。 OOP 有利于简化复杂性,但是当您的复杂程度是一些计算和哈希查找时,无需过度构建高度结构化的类。您基本上比内置运算符和语言特性抽象了一步,因此只需一个类(或者在这种情况下,甚至只有一个命名空间)就足以封装复杂性。
标签: javascript oop