- 浏览: 1587463 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
From: http://www.blueidea.com/tech/web/2007/5169.asp
全局变量是魔鬼。在YUI中,我们仅用两个全局变量:YAHOO和YAHOO_config。YUI的一切都是使用YAHOO对象级的成员或这个成员作用域内的变量。我们建议在你的应用程序也使用类似的规则。
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. 在匿名函数中,在返回语句前加入“私有”方法和变量。到目前为止,我们只是将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类。
<!--这个脚本文件包含所有的YUI实用程序-->
<script type="text/javascript"
src="http://yui.yahooapis.com/2.2.2/build/utilities/
utilities.js"></script>
<ul id="myList">
<li class="draggable">一项</li>
<li>二项</li> <!--二项将不能被拖拽-->
<li class="draggable">三项</li>
</ul>
<script>
YAHOO.namespace("myProject");
YAHOO.myProject.myModule = function () {
//YUI实用程序的私有简写引用:
var yue = YAHOO.util.Event,
yud = YAHOO.util.Dom;
//私有方法
var getListItems = function () {
// 注意这个地方使用其他的私有变量,包括"yud"YAHOO.util.Dom的简写:
var elList = yud.get("myList");
var aListItems = yud.getElementsByClassName(
"draggable", //得到仅有CSS类"draggable"的项
"li", //仅返回列表项
elList //限定搜索改元素的子
);
return aListItems;
};
//这个放回的对象将变成YAHOO.myProject.myModule:
return {
aDragObjects: [], //可对外访问的,存储DD对象
init: function () {
//直到DOM完全加载好,才实现列表项可拖拽:
yue.onDOMReady(this.makeLIsDraggable, this, true);
},
makeLIsDraggable: function () {
var aListItems = getListItems(); //我们可以拖拽的那些元素
for (var i=0, j=aListItems.length; i<j; i++) {
this.aDragObjects.push(new YAHOO.util.DD(aListItems[i]));
}
}
};
}();
//上面的代码已经执行,所以我们能立即访问init方法:
YAHOO.myProject.myModule.init();
</script>
这是一个简单的例子,特意写的详细一些——如果按照这种方式做,我们无疑能把它写的更紧凑。当项目变得更加复杂和它的API增加,这个模式缩放的很好。通过这种方式,它避免了全局命名空间,提供了对外的可以访问的API方法,支持受保护或“私有”的数据和方法。
全局变量是魔鬼。在YUI中,我们仅用两个全局变量:YAHOO和YAHOO_config。YUI的一切都是使用YAHOO对象级的成员或这个成员作用域内的变量。我们建议在你的应用程序也使用类似的规则。
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. 在匿名函数中,在返回语句前加入“私有”方法和变量。到目前为止,我们只是将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类。
<!--这个脚本文件包含所有的YUI实用程序-->
<script type="text/javascript"
src="http://yui.yahooapis.com/2.2.2/build/utilities/
utilities.js"></script>
<ul id="myList">
<li class="draggable">一项</li>
<li>二项</li> <!--二项将不能被拖拽-->
<li class="draggable">三项</li>
</ul>
<script>
YAHOO.namespace("myProject");
YAHOO.myProject.myModule = function () {
//YUI实用程序的私有简写引用:
var yue = YAHOO.util.Event,
yud = YAHOO.util.Dom;
//私有方法
var getListItems = function () {
// 注意这个地方使用其他的私有变量,包括"yud"YAHOO.util.Dom的简写:
var elList = yud.get("myList");
var aListItems = yud.getElementsByClassName(
"draggable", //得到仅有CSS类"draggable"的项
"li", //仅返回列表项
elList //限定搜索改元素的子
);
return aListItems;
};
//这个放回的对象将变成YAHOO.myProject.myModule:
return {
aDragObjects: [], //可对外访问的,存储DD对象
init: function () {
//直到DOM完全加载好,才实现列表项可拖拽:
yue.onDOMReady(this.makeLIsDraggable, this, true);
},
makeLIsDraggable: function () {
var aListItems = getListItems(); //我们可以拖拽的那些元素
for (var i=0, j=aListItems.length; i<j; i++) {
this.aDragObjects.push(new YAHOO.util.DD(aListItems[i]));
}
}
};
}();
//上面的代码已经执行,所以我们能立即访问init方法:
YAHOO.myProject.myModule.init();
</script>
这是一个简单的例子,特意写的详细一些——如果按照这种方式做,我们无疑能把它写的更紧凑。当项目变得更加复杂和它的API增加,这个模式缩放的很好。通过这种方式,它避免了全局命名空间,提供了对外的可以访问的API方法,支持受保护或“私有”的数据和方法。
评论
2 楼
liudaoru
2010-07-20
http://hi.baidu.com/lijunliang/blog/item/45f6223fc1f4ebe155e7239b.html
高性能网页开发的14条军规
1. 尽可能的减少 HTTP 的请求数 [content]
2. 使用 CDN(Content Delivery Network) [server]
3. 添加 Expires 头(或者 Cache-control ) [server]
4. Gzip 组件 [server]
5. 将 CSS 样式放在页面的上方 [css]
6. 将脚本移动到底部(包括内联的) [javascript]
7. 避免使用 CSS 中的 Expressions [css]
8. 将 JavaScript 和 CSS 独立成外部文件 [javascript] [css]
9. 减少 DNS 查询 [content]
10. 压缩 JavaScript 和 CSS (包括内联的) [javascript] [css]
11. 避免重定向 [server]
12. 移除重复的脚本 [javascript]
13. 配置实体标签(ETags) [css]
14. 使 AJAX 缓存
高性能网页开发的14条军规
1. 尽可能的减少 HTTP 的请求数 [content]
2. 使用 CDN(Content Delivery Network) [server]
3. 添加 Expires 头(或者 Cache-control ) [server]
4. Gzip 组件 [server]
5. 将 CSS 样式放在页面的上方 [css]
6. 将脚本移动到底部(包括内联的) [javascript]
7. 避免使用 CSS 中的 Expressions [css]
8. 将 JavaScript 和 CSS 独立成外部文件 [javascript] [css]
9. 减少 DNS 查询 [content]
10. 压缩 JavaScript 和 CSS (包括内联的) [javascript] [css]
11. 避免重定向 [server]
12. 移除重复的脚本 [javascript]
13. 配置实体标签(ETags) [css]
14. 使 AJAX 缓存
1 楼
liudaoru
2007-12-11
自己做的小例子:
function Bwl() { } Bwl.t = function() { alert("cccc"); return {abc:"bbb",def:'sdfe'}; }(); alert(Bwl.t.abc);
发表评论
-
几个不错的ff下调试插件
2009-12-11 11:14 1872记录一下经常使用的ff插件,其中firebug、switchh ... -
20 种提升网页速度的技巧
2009-04-15 20:19 1270From:http://www.ibm.com/develop ... -
25 个在 Web 中嵌入图表的免费资源
2009-04-14 21:27 1682From: http://www.cnbeta.com/art ... -
15个网站用户体验优化禁忌
2009-04-08 22:57 1191From:http://www.blueidea.com/de ... -
让IE8兼容IE7
2009-03-27 15:10 4314今天在搜狐首页发现:<meta http-equiv ... -
FF下分析页面加载的工具
2009-03-25 16:03 2484今天同事推荐YSlow作为 ... -
IE6下页面显示空白的问题
2009-03-24 17:01 5324今天又碰到了一个页面在IE6下加载完后一片空白的问题,而且页面 ... -
支持IE6、IE7的关闭页面的函数
2009-03-17 15:40 1710function closeWin() { var isI ... -
很弱很无奈的一段代码(打开的页面更新父窗口的链接)
2009-03-12 11:51 1033if(parent.window.opener) { pa ... -
js小脚本
2009-02-26 10:13 1569清除元素: var clearNode = functio ... -
处理一次性事件的模式
2009-02-12 20:20 1269有的时候我们需要给一个标签增加一次性的事件,比如先在输入框中增 ... -
Linux:rsync服务器的快速搭建和使用
2008-12-30 10:15 1343From: http://tech.ddvip.com/200 ... -
js导致的页面空白问题
2008-12-29 13:45 3181今天遇到一个很奇怪的问题,系统的一个页面在一台机器上无法完全展 ... -
IE6下history.back无效的问题
2008-12-26 23:56 3813解决IE6中history.back()无法返回的问题:< ... -
浏览器兼容比较好的设置min-width的方式
2008-12-12 18:45 2562<!DOCTYPE HTML PUBLIC " ... -
CSS代码分享:浏览器CSS Reset方法十例zz
2008-12-07 18:06 1176From: http://www.52css.com/arti ... -
在Javascript中,什么是闭包(Closure)
2008-12-02 11:11 1051from: http://javascript.chinaht ... -
Unicode、GB2312、GBK和GB18030中的汉字[转]
2008-11-25 15:22 3872From: http://blog.csdn.net/fmdd ... -
空字符串的split
2008-11-21 19:16 1578本来以为是零,但是在java和js里试了以后发现居然都是1,很 ... -
docType 相关的loose.dtd导致的无法获取scrollTop的解决
2008-11-19 11:32 1680function iecompattest(){ retu ...
相关推荐
模块模式是JavaScript中实现封装和私有变量的一种方式。通过立即执行函数表达式(IIFE)和闭包,可以在全局作用域中创建独立的命名空间,防止变量污染。 六、观察者模式 观察者模式是一种行为设计模式,它定义了...
JavaScript是一种广泛应用于Web开发的轻量级编程语言,以其动态、弱类型和基于原型的特点而闻名。这个"JavaScript技巧收集.7z"压缩包很可能是包含了一系列关于JavaScript编程的实用技巧、代码片段或者示例项目。尽管...
JavaScript是一种广泛应用于Web开发的脚本语言,由Netscape公司的Brendan Eich在1995年创造。它最初被命名为LiveScript,但在Sun Microsystems的Java语言的影响下,更名为JavaScript,但两者并无直接关联。...
1. **基础语法**:JavaScript是一种基于原型的动态类型语言,其基础包括变量、数据类型(如字符串、数字、布尔值、null、undefined、对象)、运算符、流程控制(条件语句、循环语句)、函数等。 2. **对象与原型**...
2. **对象与数组**:JavaScript中的对象是一种键值对的集合,而数组则是一系列元素的有序列表。理解如何创建、访问和操作对象及数组是JavaScript学习的关键。这部分会涵盖对象字面量、构造函数、原型链、数组方法...
JavaScript,一种广泛应用于Web开发的轻量级编程语言,由网景公司的Brendan Eich在1995年设计创建。它最初被命名为LiveScript,后来为了与Sun Microsystems的Java语言相呼应,更名为JavaScript。JavaScript是动态...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态内容。这个"Javascript.CHM中文幫助文檔.7z"压缩包文件包含了关于JavaScript的中文帮助文档,对于学习和理解JavaScript...
JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在前端开发中扮演着核心角色。本课程结合了博客内容,旨在帮助初学者轻松掌握JavaScript基础知识,从而实现更高效的开发工作。 首先,我们从“3注释.htm...
SM2是由中国商用密码行业协会制定的一种公钥加密算法,主要用于数据加密和数字签名,广泛应用于网络安全和隐私保护领域。 **描述:“可以使用并且无乱码的javascript版本的算法为sm2加解密、验签工具,解压直接打开...
易语言是一种专为中国人设计的编程...总之,“易语言浏览器操作模块”为易语言开发者提供了一种强大的工具,使得与Web世界的交互变得更加简单。通过学习和实践,你将能够用易语言编写出高效、便捷的浏览器控制程序。
JavaScript是一种广泛应用于Web开发的脚本语言,它主要用于客户端的网页交互,为用户提供动态、响应式的用户体验。在“JavaScript从入门到精通(第2版)PPT”这套教学资料中,我们将深入探讨JavaScript的核心概念、...
JavaScript是一种广泛用于网页和网络应用的编程语言,主要用来实现客户端交互、网页动态化以及服务器端(Node.js)开发。它基于ECMAScript规范,具有事件驱动、函数式以及原型式的特性。 【压缩包子文件的文件名称...
JavaScript是一种广泛使用的、基于原型的、多范式的脚本语言,主要用于网页前端开发,但随着Node.js的出现,它也扩展到了服务器端编程。JavaScript的设计灵感来源于Java、Self和Scheme,它支持面向对象、命令式和...
JavaScript是一种广泛应用于客户端Web开发的脚本语言,它可以在用户的浏览器上运行,提供实时的交互效果。在创建日历控件时,开发者会利用JavaScript来处理DOM(文档对象模型),动态修改HTML元素以显示日历界面。 ...
JavaScript,作为一种广泛应用于网页和网络应用的编程语言,是前端开发中的核心技术之一。这个"JavaScript_JCJD-一个经典的JavaScript教程"显然是一份详细的学习资料,旨在帮助开发者深入理解和掌握JavaScript的基础...
总之,JavaScript的函数式编程提供了一种不同的思考和解决问题的方式,它鼓励编写模块化、无副作用的代码,从而提高代码质量。通过学习和实践函数式编程,开发者可以更好地驾驭JavaScript,写出更高效、更易于理解和...
JavaScript是一种广泛应用于网页和网络应用的脚本语言,它在客户端运行,为用户提供动态交互体验。这个名为"javascript源代码_经典实例100.rar"的压缩包文件包含了一百个JavaScript的经典实例,旨在帮助开发者深入...
JavaScript是一种广泛使用的编程语言,尤其在Web开发领域中不可或缺。它主要用于客户端的网页交互,可以处理用户输入、动态显示内容、与服务器进行异步通信等。JavaScript的核心概念包括变量、数据类型、控制结构...
### JavaScript核心原理:深入理解对象与原型...通过对象和原型链机制,JavaScript支持一种非常灵活的继承模型,允许代码重用和模块化设计。在实际开发中,熟练掌握这些基础概念对于构建高质量的Web应用程序至关重要。
**JavaScript**是一种轻量级的编程语言,被广泛应用于网页开发中,用于增强网页的交互性与动态效果。以下是一些基本的语法和使用技巧。 ##### 1. 嵌入JavaScript代码 在HTML文档中嵌入JavaScript代码可以通过`...