YUI2.8相关核心源码浅解及学习笔记(零)

本文详细介绍了YUI2.8框架的核心功能与设计模式,重点讲解了Yahoo全局文件中的关键方法,如命名空间定义、日志记录、模块注册等,并深入探讨了语言工具对象及其提供的实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上班前这几天得学习下公司的核心框架之一YUI2.8了,这个框架的确和以前专门用的jQ有很大的不同,代码量上去了,但设计模式等方面是相当优雅,粗略学习了下API和源码架构~~写一下对于YUI核心的一些东西学习的笔记摘要。(小弟写的不好~~轻拍)

[b]零、Yahoo全局文件[/b]
首先从核心文件yahoo.js开始:
核心文件主要是定义了yahoo一些全局的方法:
[b]1. YAHOO.namespace[/b]
这个方法是用于自定义命名空间的,当然框架已经定义好三个了:
YAHOO.namespace("util", "widget", "example");

我们也可以自己定义
[b]2、YAHOO.log[/b]
这个方法是记录日志的方法,这个方法可以说是一个快捷方法,是YAHOO.widget.Logger.log的快捷方法,但前提是必须引入上面的包~~
[b]3、YAHOO.register[/b]
这个方法是在Yahoo中注册模块,注明它的name和version,一般会出现在组件代码的最后位置:
YAHOO.register("animation", YAHOO.util.Anim, {version: "2.8.1", build: "19"});

[b]4、YAHOO.lang[/b]
这个对象是个工具对象,下面实现了很多常用的方法,具体看源码,下面几个比较有代表性
YAHOO.lang.hasOwnProperty
这个方法可以用来过滤直接添加到Object的原型上的属性。其实除了 Safari所有浏览器都实现了这个方法 。
YAHOO.lang.augmentProto
YAHOO.lang.augmentProto 是重用原型的,可以把s对象的原型复制到r中
YAHOO.lang.augmentProto(r,s);

这边还有一个函数叫augmentObject,用法和上面的方法一样,只是它是将一个对象的所有属性添加到接收对象身上,如果接收对象已有某属性则不添加该属性。


var a=arguments, i, p, overrideList=a[2];
if (overrideList && overrideList!==true) {
for (i=2; i<a.length; i=i+1) {
r[a[i]] = s[a[i]];
}
}

注意这边要是有第三个参数或以上,这些参数代表着需要替换的属性,如果接收对象本来已经有了某个属性,则不添加该属性如果该参数是true,所有提供对象的属性和方法将被添加到接收对象,如果接收对象已经有了某个属性则覆盖原有属性。

在augmentProto也是通过上述机制对augmentObject进行重用:只是将两个的prototype传入而已:
var a=[r.prototype,s.prototype], i;
/*其间省略三行*/
L.augmentObject.apply(this, a);


YAHOO.lang.extend
这个方法也是一个核心方法:类似于prototype框架中的Extend方法,也是对于继承的一个封装方法
extend: function(subc, superc, overrides) {
if (!superc||!subc) {//这两个是必须的传入参数
throw new Error("extend failed, please check that " +
"all dependencies are included.");
}
var F = function() {}, i;//新建一个F中间类
F.prototype=superc.prototype;//使F的原型指向超类的原型
subc.prototype=new F();//用中间类new出一个对象并使子类的原型对象指针指向它,但此处子类的构造函数constructor指向F
subc.prototype.constructor=subc;//重新把构造函数指向原来的子类回来
subc.superclass=superc.prototype;//在子类中定义一个叫superclass的静态对象指向超类的原型
if (superc.prototype.constructor == OP.constructor) {//OP是Object.prototype
superc.prototype.constructor=superc;
}

if (overrides) {
for (i in overrides) {
if (L.hasOwnProperty(overrides, i)) {
subc.prototype[i]=overrides[i];
}
}

L._IEEnumFix(subc.prototype, overrides);
}
},

这边继续是经典的类式继承(具体什么是类式继承看我上面的注释,犀牛书上也有),不过写的更加的细致,第三个传入是需要重写的属性,在子类的原型中添加这些属性。
这里注意相对于2.4版本,这边的2.8对于上面的对象以设置别名L,在下面定义:

YAHOO.util.Lang = L;
L.augment = L.augmentProto;
YAHOO.augment = L.augmentProto;
YAHOO.extend = L.extend;


[b]5、YAHOO_config 和 YAHOO.env[/b]
下面引自官方解释翻译:
YAHOO.env 包含了页面中所加载的所有YUI组件的信息,任何组件都可以使用 YAHOO.env.getVersion 来访问到这些信息,当动态加载YUI组件的时候这个方法就特别有用,因为可以查看版本检测依赖关系。
YAHOO_config是一个对象,你可以在它上面定义一个回调函数,这样每当页面中加载一个新的YUI组件的时候,这个回调函数就会自动执行,并且会传送给它一个包含了组件信息的对象。


貌似写的太长了,分几篇写吧。。。。。第二篇DOM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值