Y.namespace()方法

Y.namespace()的作用是提供命名空间,其实有原理很简单。例如Y.namespace("A.B");事实做了这样一件事:
Y.A = {}; Y.A.B = {};

.namespace()方法在YUI2中就已经有了,到了YUI3,其实它的作用削弱了。在YUI2中,YAHOO是一个全局作用域的对象,所以.namespace()创建的对象是全局作用域的,不在同一个函数作用域中,也可以互相访问。但到了YUI3,Y是一个函数内的作用域,不同函数之间用namespace()方法创建的对象是不能互相访问的。

demo如下:

============================================
[YUI2]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿当制作</title>
<script src="http://assets.taobaocdn.com/yui/2.7.0/build/yuiloader/yuiloader-min.js" type="text/javascript"></script>
<script type="text/javascript">
var loader = new YAHOO.util.YUILoader();  
</script>
</head>

<body>
<script type="text/javascript">
function init(){
(function(){       
YAHOO.namespace("A.B");
YAHOO.A.B.testStr = "hello world";
var num = 12345;
})();

(function(){
alert(YAHOO.A.B.testStr);
alert(num);
})();
}
</script>

<script type="text/javascript">
loader.require(['dom', 'event']);
if(init){
loader.onSuccess = init;
}
loader.insert();
</script>
</body>
</html>

=========================================

[YUI3]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿当制作</title>
<script src="http://yui.yahooapis.com/3.0.0b1/build/yui/yui-min.js" type="text/javascript"></script>
</head>

<body>
<script type="text/javascript">
YUI().use(function(Y){
Y.namespace("A.B");
Y.A.B.testStr = "hello world";
});

YUI().use(function(Y){
alert(Y.A.B.testStr);
});
</script>
</body>
</html>

=============================================

如果想在YUI3中也使用能跨函数的对象,我们只能在YUI().use()方法外定义一个全局变量,然后将它赋值给Y.namespace()生成的对象,用全局变量搭一个桥梁。但这种方法也有问题,因为YUI.use()方法是动态加载js文件的,其回调函数的触发时间是没有保障的,有可能第二个YUI().use()的回调在第一个YUI().use()的回调之前触发。下面是个demo:

=======================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿当制作</title>
<script src="http://yui.yahooapis.com/3.0.0b1/build/yui/yui-min.js" type="text/javascript"></script>
</head>

<body>
<script type="text/javascript">
YUI().use("dd","console",function(Y){
alert(1);
});

YUI().use(function(Y){
alert(2);
});
</script>
</body>
</html>

================================================

从流程上来看,应该是先弹出1,后弹出2,但事实上,因为use()方法是异步加载的,别起了别的线程,所以两个回调的触发时间并不由use()方法使用的前后来决定,因为后面那个use方法没有加载其它组件,所以它的回调反而在前面那个之前触发。

转载于:https://www.cnblogs.com/cly84920/archive/2009/09/01/4426948.html

YUI3学习笔记 ( 8 )相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. RTX组织架构刷新出现了问题
  2. 相关性分析p值_一行代码掌握皮尔逊相关分析,洞察变量关系
  3. 营销型网站吸引用户说难也难,说简单也简单
  4. Windows下各个盘中的文件夹属性变为隐藏,怎么取消隐藏属性
  5. 类的继承和派生java_类的继承和派生
  6. [OIBH] 糖果盒(Candy Box)——又一个最大子矩形
  7. idea 安装php插件_免费版的 IDEA 为啥不能使用 Tomcat ?
  8. oracle 分割字符成数组,oracle依据分隔符将字符串分割成数组函数
  9. 从平台角度看物联网体系架构
  10. 智能手机之新手篇[转]
  11. POJ 1050 To the Max (最大子矩阵和)
  12. Android 程序员计算器 开发记录-Git版本控制初步接触
  13. JAVA之stream汪文君_Java8新特性之Stream API
  14. 又是一年平安夜,程序员教你用trutle画苹果,有手就行
  15. 报错org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to org.apache.hadoop.mapred.FileSpl
  16. oracle pck文件是什么,PCK文件扩展名 - 什么是.pck以及如何打开? - ReviverSoft
  17. 网站服务器会把手机拉黑吗,怎么知道对方手机把我拉黑了
  18. 2D骨骼动画工具DragonBones的使用教程
  19. 【AI with ML】第 7 章 :用于自然语言处理的递归神经网络
  20. [安全] AD域解释 , 域和组的区别?

热门文章

  1. 二、噪音大小对使用的影响
  2. java对菜单项的监听_我是新手,请问大神java菜单项和下拉列表添加监听和监听方法???有变量和方法就行了...
  3. python装饰器详解51-python装饰器使用实例详解
  4. 如何做到免驱打印_证卡打印机云打印方案
  5. linux备份和还原设置密码,AnyBackup Linux操作系统备份与恢复最佳实践手册(33页)-原创力文档...
  6. 设计模式004:抽象工厂模式
  7. edge新版 能够正则式_在最近的一项HTML5测试中,新版Edge浏览器表现满分
  8. 用SVD和字典学习方法重建图像(cifar-10图片集)
  9. 10恢复出厂设置_笔记本电脑怎么恢复出厂设置
  10. python语言公式求圆周率_通过Python实现圆周率的计算(公式方法和蒙特卡罗方法)...