首页 > web前端 > js教程 > 正文

Javascript的一种模块模式_javascript技巧

php中文网
发布: 2016-05-16 18:20:08
原创
1252人浏览过

Douglas Crockford已经传授了一个有用的单例模式(singleton pattern)实现此规则,我认为他的模式有益于你基于YUI的那些应用。Douglas叫它模块模式(module pattern)。它是如下工作的:
1、创建一个命名空间对象:如果你使用YUI,可以用YAHOO.namespace()方法: YAHOO.namespace("myProject");这分配了一个空的myProject对象,是YAHOO的一个成员(如 果myProject已存在的话,则不会被覆盖)。现在我们可以开始添加YAHOO.myProject的成员。
2、对你的命名空间对象分配一个匿名函数返回值:

45°C商城系统
45°C商城系统

系统介绍 45°C 商城系统,以 Thinkphp5.0 + Uniapp + Layui2.9 + Vue 为技术基石,精心打造出的全新 MINI 商城应用。其功能覆盖全面,无论是 PC 商城、H5 商城,还是公众号商城、微信小程序以及抖音小程序的制作都能完美胜任。采用标准系统结合插件模式开发,用户能够极为便捷地定制专属的个性模块。整个系统,从程序设计到 UI 呈现,都秉持着一贯的小而美理念。程

45°C商城系统 0
查看详情 45°C商城系统
复制代码 代码如下:

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

注意有闭合大括号和紧接着的括号()的最后一行—这种符号导致了匿名函数的立即执行,返回包含myPublicProperty和myPublicMethod的对象。只要这个匿名函数一返回,返回对象就作为YAHOO.myProject.myModule被访问。
3、在匿名函数中,在返回语句前加入“私有”方法和变量。到目前为止,我们只是将myPublicProperty和myPublicMethod直接分配到YAHOO.myProject.myModule中。此外,当我们在返回语句之前放置一些代码时,这个模式还支持被增加的效用。
复制代码 代码如下:

YAHOO.myProject.myModule = function () {
//“私有”变量:
var myPrivateVar = "我仅能在YAHOO.myProject.myModule内被访问。";
//私有方法:
var myPrivateMethod = function () {
YAHOO.log("我仅能在YAHOO.myProject.myModule内被访问。");
}

return {
myPublicProperty: "我作为YAHOO.myProject.myModule.myPublicProperty能被访问。"
myPublicMethod: function () {
YAHOO.log("我作为YAHOO.myProject.myModule.myPublicMethod能被访问。");
//在myProject,我能访问私有的变量和方法
YAHOO.log(myPrivateVar);
YAHOO.log(myPrivateMethod());
//myPublicMethod的原生作用域是myProject,我们可以用“this”来访问公共成员。
YAHOO.log(this.myPublicProperty);
}
};
}();

在上面的代码中,我们从一个匿名函数返回有两个成员的一个对象。在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类。
复制代码 代码如下:




  • 一项

  • 二项

  • 三项


<script> <BR>YAHOO.namespace("myProject"); <BR>YAHOO.myProject.myModule = function () { <BR>//YUI实用程序的私有简写引用: <BR>var yue = YAHOO.util.Event, <BR>yud = YAHOO.util.Dom; <BR>//私有方法 <BR>var getListItems = function () { <BR>// 注意这个地方使用其他的私有变量,包括"yud"YAHOO.util.Dom的简写: <BR>var elList = yud.get("myList"); <BR>var aListItems = yud.getElementsByClassName( <BR>"draggable", //得到仅有CSS类"draggable"的项 <BR>"li", //仅返回列表项 <BR>elList //限定搜索改元素的子 <BR>); <BR>return aListItems; <BR>}; <BR>//这个放回的对象将变成YAHOO.myProject.myModule: <BR>return { <BR>aDragObjects: [], //可对外访问的,存储DD对象 <BR>init: function () { <BR>//直到DOM完全加载好,才实现列表项可拖拽: <BR>yue.onDOMReady(this.makeLIsDraggable, this, true); <BR>}, <BR>makeLIsDraggable: function () { <BR>var aListItems = getListItems(); //我们可以拖拽的那些元素 <BR>for (var i=0, j=aListItems.length; i<j; i++) { <BR>this.aDragObjects.push(new YAHOO.util.DD(aListItems[i])); <BR>} <BR>} <BR>}; <BR>}(); <BR>//上面的代码已经执行,所以我们能立即访问init方法: <BR>YAHOO.myProject.myModule.init(); <BR></script>

这是一个简单的例子,特意写的详细一些——如果按照这种方式做,我们无疑能把它写的更紧凑。当项目变得更加复杂和它的API增加,这个模式缩放的很好。通过这种方式,它避免了全局命名空间,提供了对外的可以访问的API方法,支持受保护或“私有”的数据和方法。
原文地址:http://dancewithnet.com/2007/12/04/a-javascript-module-pattern/
相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号