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
投稿

猜你喜欢

  • 在Django中实现添加user到group并查看

    2021-12-08 21:47:07
  • 学生信息管理系统python版

    2023-10-17 07:32:34
  • 利用Python绘制一个可爱的米老鼠

    2022-01-29 14:34:30
  • Python可变参数会自动填充前面的默认同名参数实例

    2022-05-24 05:00:43
  • python远程连接MySQL数据库

    2024-01-19 13:53:29
  • 浅谈python 导入模块和解决文件句柄找不到问题

    2023-12-07 03:40:07
  • python 切片和range()用法说明

    2021-12-12 07:40:52
  • Python制作旋转花灯祝大家元宵节快乐(实例代码)

    2023-10-24 02:49:18
  • 深入解析Golang中JSON的编码与解码

    2023-07-04 12:45:32
  • 学生信息管理系统Python面向对象版

    2021-11-11 03:11:04
  • 从django的中间件直接返回请求的方法

    2022-02-04 23:32:23
  • vue 项目代码拆分的方案

    2024-06-05 09:17:56
  • python3爬虫之入门基础和正则表达式

    2023-04-11 12:48:02
  • Python3+OpenCV实现简单交通标志识别流程分析

    2021-03-12 06:37:41
  • Python简单爬虫导出CSV文件的实例讲解

    2022-10-11 03:39:19
  • python插入排序算法的实现代码

    2021-09-11 15:36:15
  • 浅谈MySQL中的group by

    2024-01-18 22:53:54
  • Python调用SMTP服务自动发送Email的实现步骤

    2023-02-23 14:17:30
  • python 实现音频叠加的示例

    2022-10-02 21:53:38
  • Python接口传输url与flask数据详解

    2023-03-18 20:00:42
  • asp之家 网络编程 m.aspxhome.com