找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 站长资讯 业界 查看内容

Javascript的一种模块模式

2009-12-25 00:26| 发布者: admin| 查看: 70| 评论: 0|原作者: 韩菱纱

全局变量是魔鬼。Douglas Crockford已经传授了一个有用的单例模式(singleton pattern)实现此规则,他的模式有益于你基于YUI的那些应用。Douglas叫它模块模式(module pattern)。它是如下工作的:

1. 创建一个命名空间对象:如果你使用YUI,可以用YAHOO.namespace()方法:



以下是引用片段:
YAHOO.namespace("myProject");


这分配了一个空的myProject对象,是YAHOO的一个成员(如 果myProject已存在的话,则不会被覆盖)。现在我们可以开始添加YAHOO.myProject的成员。

2. 对你的命名空间对象分配一个匿名函数返回值:

以下是引用片段:
YAHOO.myProject.myModule = function () {
return {
myPublicProperty: "我作为YAHOO.myProject.myModule.myPublicProperty被访问。";
myPublicMethod: function () {
YAHOO.log("我作为YAHOO.myProject.myModule.myPublicMethod被访问。");
}
};
}(); // 这个括号导致匿名函数被执行且返回


注意有闭合大括号和紧接着的括号()的最后一行—这种符号导致了匿名函数的立即执行,返回包含myPublicProperty和myPublicMethod的对象。只要这个匿名函数一返回,返回对象就作为YAHOO.myProject.myModule被访问。



3. 在匿名函数中,在返回语句前加入“私有”方法和变量。

此外,当我们在返回语句之前放置一些代码时,这个模式还支持被增加的效用。


在上面的代码中,我们从一个匿名函数返回有两个成员的一个对象。在YAHOO.myProject.myModule内部,可以分别用this.myPublicProperty和this.myPublicMethod来访问。在YAHOO.myProject.myModule外部,公共成员可以用YAHOO.myProject.myModule.myPublicProperty和YAHOO.myProject.myModule.myPublicMethod来访问。

私有变量myPrivateProperty和myPrivateMethod只能被匿名函数本身或返回对象的成员访问。尽管匿名函数会立即执行和终止,但它们依然是保留着,凭借闭包(closure)的力量——通过一个函数的局部变量在这个函数返回后是保留的规则。只要 YAHOO.myProject.myModule需要它们,我们的两个私有变量就不会被销毁。



4. 实践这个模式。让我们来看看这个模式的一个常见应用案例。假设你有一个列表,列表上的一些项可以被拖拽。应用拖拽的项上有拖拽的CSS类。




以下是引用片段:





一项

二项

三项




这是一个简单的例子,特意写的详细一些——如果按照这种方式做,我们无疑能把它写的更紧凑。当项目变得更加复杂和它的API增加,这个模式缩放的很好。通过这种方式,它避免了全局命名空间,提供了对外的可以访问的API方法,支持受保护或“私有”的数据和方法。

本篇文章来源于 站长资讯网 原文链接:http://javascript.chinahtml.com/2007/119725499417316.shtml

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 23:28 , Processed in 0.101282 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部