转自:http://www.zhuoqun.net/html/y2008/1109.html
今天开始写YUI 的学习笔记。其实作为一个初学者,我知道学习 JavaScript 还是要从基础学起,最好不要去学习**类库的使用方法,我也一直都在看相应的有关JavaScript基础的资料,大部分的学习还是在那个上面。不过,既 然答应了Blog的事情也不能不做,虽然这个系列可能更新得很慢,还是要写下去 :) 今天先开个头,介绍下YUI中最基础的一个东西,英文好的请直接看 YUI 官方站点,这里可以无视,没什么新的东西。
在YUI中,YAHOO 这个字符串是最常见的了,在所有的组件中都会看到。因为在YUI中YAHOO是一个全局对象,它为所有YUI类库中的代码提供了一个命名空间(namespace),所以在所有使用了YUI的页面中必须包含YAHOO对象。
在页面中包含YAHOO全局对象:
<script type=”text/javascript” src=”http://yui.yahooapis.com/2.6.0/build/yahoo/yahoo-min.js” ></script>
注意 ,如果页面中使用了YUI其他的一些组件,那么上面这行代码必须在所有引用YUI组件的script标签前面。
YAHOO全局对象除了为所有的YUI组件提供命名空间之外,还有包含了一些很常用的方法:
- YAHOO.namespace
- YAHOO.lang
- YAHOO.lang.hasOwnProperty
- YAHOO.lang.extend
- YAHOO.lang.augment
- YAHOO.log
- YAHOO_config 和 YAHOO.env
- YUI 模块名
1. YAHOO.namespace
这个方法可以用来自定义命名空间。YUI中YAHOO全局对象会自动创建三个命名空间:YAHOO.util, YAHOO.widget 以及 YAHOO.example 。如果你想要在YUI的基础上自己写一个组件,或者想把某个产品的所有JS代码放到一个命名空间下来避免和其他JS冲突的话,就可以使用这个方法。然后你 就可以在自定义的命名空间中定义自己的属性或者方法了。
2.YAHOO.lang
这个其实是个对象,它有很多有用的方法,比如 isArray(), isFunction() 等,来判断指定的参数是否是数组、函数等。还包含了下面要介绍的几个方法。
3.YAHOO.lang.hasOwnProperty
这个方法可以用来过滤直接添加到Object的原型上的属性。其实所有的A级浏览器都已经有hasOwnProperty这种原生方法了,除了 Safari 。所以为了保险起见还是使用YAHOO.lang.hasOwnProperty比较好。而且如果浏览器有hasOwnProperty这种原生方法的 话,YAHOO.lang.hasOwnProperty 会进行直接调用。
具体请看这里
4.YAHOO.lang.extend
因为JavaScript一开始并没有被设计成面向对象的语言,所以要实现继承就需要一些技巧,而YAHOO.lang.extend就是来帮助你 在JavaScript中实现继承的,它消除了很多现有方法的弊端。YAHOO.extend 是 YAHOO.lang.extend 的别名,你也可以使用这种缩写。
5.YAHOO.lang.augment
YAHOO.lang.augment 是用来重用现有代码的,用法如下,它可以帮你把对象1原型上的某些或所有属性应用到对象2的原型上。
YAHOO.lang.augment(对象2,对象1)
YAHOO.augment 是 YAHOO.lang.augment 的别名,你也可以使用这种缩写。
6.YAHOO.log
这个方法是用来调试的,你可以用它输出一些调试信息。不过,需要注意的是,这个方法是要和 YAHOO.widget.Logger 组 件配合来使用的,因为只有YAHOO.widget.Logger 组件可以输出 YAHOO.log 记录的信息。如果YAHOO.widget.Logger 组件可用的话,YAHOO.log 就会调用 YAHOO.widget.Logger.log 方法,否则就什么也不做。
7.YAHOO_config 和 YAHOO.env
YAHOO.env 包含了页面中所加载的所有YUI组件的信息,任何组件都可以使用 YAHOO.env.getVersion 来访问到这些信息,当动态加载YUI组件的时候这个方法就特别有用,因为可以查看版本检测依赖关系。
YAHOO_config是一个对象,你可以在它上面定义一个回调函数,这样每当页面中加载一个新的YUI组件的时候,这个回调函数就会自动执行,并且会传送给它一个包含了组件信息的对象。
8.YUI 模块名
每个YUI组件都有一个对应的模块名,这些模块名在YUI中都是唯一的。这些模块名会在很多地方都用到(尤其是YUILoader ,因为有时候需要使用YUILoader 动态加载组件,这个时候就要传给它所需组件的模块名)。