YUI学习笔记(1)

作者:xujiwei 来源:HotHeart's BLOG 时间:2009-01-12 18:06:00 

今天开始学习 YUI,加强一下对 JavaScript 的理解。

1. 命名空间 YAHOO.namespace(yahoo.js)

YUI 中使用了命名空间的概念,在 JS 中使用命名空间是为了模块以及代码组织清晰的需要,通过使用命名空间可以将功能相似或同一模块中的函数、变量等放到同一个命名空间下。

其实 JS 中的命名空间就是一个嵌套的对象而已,即子命名空间相当于父命名空间中的一个属性,它本身也是一个对象,这样子命名空间也可以有自己的子命名空间。

在 YUI 中,命名空间的格式与 C# 中类似,是以点号分隔的字符串,可以使用 YAHOO 对象的静态方法 namespace 来创建命名空间,需要注意的是,以 namespace 方法创建命名空间时,所有的对象都是附加在 YAHOO 这个对象上的,如果调用 namespace 方法创建一个“com.xujiwei.ajax”这样的命名空间,其中 ajax 的完整路径将是 YAHOO.com.xujiwei.ajax,而不是 com.xujiwei.ajax,也就是说 namespace 不会产生新的顶层对象,一切以 YAHOO 对象为基础。

namespace 方法接受一个或多个字符串来生成命名空间,但是它只返回最后一个参数所代表的命名空间的最后一个域的对象,例如使用 namespace("com.xujiwei.js", "com.xujiwei.ajax") 时它的返回值是代表 js 这个模块的的对象:

YAHOO.namespace("com.xujiwei.js", "com.xujiwei.ajax").get = function() {
    alert("get method of com.xujiwei.ajax");
}
YAHOO.com.xujiwei.ajax.get();

2. YAHOO.lang.extend(yahoo.js)

YAHOO.lang.extend 负责扩展一个现在的函数对象,相当于面向对象中的继承,并且可以附加一个参数重写继承的方法,它的函数声明是:

extend: function(subc, superc, overrides)

其中 subc 为要扩展的函数对象,superc 是要继续的函数对象,overrides 中包含着要重写父类的方法。

YAHOO.lang.extend 是通过原型链的方式来扩展对象,即创建一个父类的实例做为子类的原型对象,在 extend 方法中,首先构造了一个空函数,将空函数的 prototype 指向父类的 prototype,以免在父类的构造函数需要参数时创建父类实例时会出错,然后创建这个空函数的实例赋值给子类的 prototype 对象,并且给子类添加一个 superclass 属性指定它的父类,另外还指定了子类 prototype 的 constructor 属性为子类构造函数,以免创建子类实例时会丢失 constructor 属性,这个问题我在《慎用 somefunction.prototype》有提到。


var F = function() {};
F.prototype = superc.prototype;
subc.prototype = new F();
subc.prototype.constructor = subc;
subc.superclass = superc.prototype;

接着处理的是要重写的函数,首先遍历 overrides 参数,并且使用 hasOwnProperty 方法判断属性是否为 overrides 自身的属性,而不是从 Object 对象的 prototype 继承过来的,如果是 overrides 自身的属性,那么就覆盖子类 prototype 的相同成员。

标签:yui,笔记,函数,JavaScript
0
投稿

猜你喜欢

  • 管理员必读10个重要MySQL客户启动选项

    2008-06-07 16:57:00
  • asp修改文件和文件夹的名字的代码

    2011-04-11 11:04:00
  • oblog4.6转换ucenterHome1.5过程全记录,提供老用户无法登陆的补丁

    2009-10-29 12:04:00
  • 如何利用SysOjects来获知数据库的信息?

    2010-01-01 15:43:00
  • 用ASP打开远端MDB数据库

    2007-10-13 06:56:00
  • ASP应用之教你使用模板

    2008-10-15 13:09:00
  • asp数组使用特法

    2009-05-11 12:43:00
  • SQLServer 连接 EXCEL

    2009-07-09 19:00:00
  • HTML编辑器FCKeditor使用详解

    2010-02-28 12:30:00
  • 理解和使用Oracle 8i分析工具LogMiner

    2010-07-16 13:22:00
  • 带你轻松接触 MySQL中损坏的MyISAM表

    2008-12-19 17:55:00
  • JavaScript 日期下拉选择器

    2008-10-31 12:13:00
  • 不同浏览器的兼容一些写法

    2009-03-26 12:58:00
  • 将有安全问题的SQL过程删除,比较全面

    2007-08-06 14:46:00
  • ASP开发中有用的函数(function)集合(3)

    2008-10-14 17:20:00
  • 新云4.0 模板通用标签说明

    2008-11-20 13:12:00
  • ie6下实现position-fixed效果

    2009-06-05 18:47:00
  • 影响SQL Server性能的三个关键点

    2009-03-09 13:11:00
  • VBScript中变量作用域

    2007-11-02 10:03:00
  • Asp WinHttp.WinHttpRequest.5.1 对象使用详解

    2012-05-02 10:15:27
  • asp之家 网络编程 m.aspxhome.com