YUI学习笔记(1)(2)

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

在处理 overrides 的最后,还修复了 IE 中不枚举与内部函数同名的函数的 bug,即例如 overrides 中包含了 toString 或 valueOf 的定义,但是这两个函数也是 Object 对象所具有的,在 IE 中使用 for(p in overrides) 就不会得到这两个函数,因此需要修复,这是 YAHOO.lang 中 _IEEnumFix 函数所做的工作。


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

_IEEnumFix 只是简单的判断当前浏览器是否为 IE,如果为 IE 则从一个已经定义的列表中获取在 IE 中枚举不到的函数名列表,逐一判断是否为源对象自身的属性并且与 Object 原型中的同名函数不一样,如果是则添加到目标对象。如果浏览器不是 IE 则 _IEEnumFix 直接就是一个空函数,直接不处理。

_IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
    for (var i=0;i<ADD.length;i=i+1) {
    var fname=ADD[ i ],f=s[fname];
    if (L.isFunction(f) && f!=Object.prototype[fname]) {
        r[fname]=f;
    }
    }
} : function(){},

3. YAHOO.lang.augmentObject(yahoo.js)

augmentObject 方法用来引入目标对象的属性,并且处理重写,通常用于合并配置对象与默认配置对象。

augmentObject 有三种调用方法,分别是:

augmentObject(result, source),一般情况下用些方法,从 source 引入 result 中没有的属性;

augmentObject(result, source, override),override 设置是否覆盖,如果是 true 的话,那么 source 中所有属性会覆盖 result 中已有的属性;

augmentObject(result, source, ovrride_name, ...),指定要覆盖属性的列表,source 参数后为要覆盖属性名称的列表,例如覆盖 result 中的 toString 和 valueOf,那么可以调用 augmentObject(result, source, "toString", "valueOf")来实现。

合并对象的最后同样调用了 _IEEnumFix 方法来修正 IE 中不枚举与内部属性同名属性的 bug。

augmentProto 与 augmentObject 功能基本相同,只不过后者是处理对象,而前者是处理函数的 prototype,它是通过使用两个参数的 prototype 来构造一个参数列表,传递给 augmentObject 对象来实现 augmentProto 的功能。

var a=[r.prototype,s.prototype];
for (var i=2;i<arguments.length;i=i+1) {
    a.push(arguments[ i ]);
}
L.augmentObject.apply(this, a);

因为 augmentProto 是调用 augmentObject 来实现的,因此它的调用格式也是 augmentObject 一样,具体可以看看上面 augmentObject 的三种调用方法。

另外,YAHOO.lang.merge 方法也是通过调用 augmentObject 方法来实现对象的合并。 

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

猜你喜欢

  • php让json_encode不自动转义斜杠“/”的方法

    2023-08-19 17:04:28
  • Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

    2023-07-12 10:50:17
  • Python numpy.transpose使用详解

    2021-10-17 16:51:10
  • python 在mysql中插入null空值的操作

    2022-09-24 09:48:40
  • go语言编程学习实现图的广度与深度优先搜索

    2024-05-22 10:16:34
  • SingleFlight模式的Go并发编程学习

    2024-04-29 13:05:39
  • 解决go 生成的exe不在bin文件夹里的问题

    2024-03-16 20:49:52
  • Python中文件的读取和写入操作

    2023-01-08 22:05:52
  • javascript基础之数组(Array)对象

    2008-06-25 13:32:00
  • JS关于刷新页面的相关总结

    2024-04-22 12:52:36
  • RSS2.0规范中文版

    2008-06-25 13:53:00
  • python+opencv实现论文插图局部放大并拼接效果

    2023-12-07 17:29:12
  • 解读Python中的frame是什么

    2023-09-26 08:25:50
  • xhtml+css页面制作过程中问题的解决方案

    2008-08-05 18:00:00
  • 如何在pyqt中实现全局事件实战记录

    2023-07-01 02:25:46
  • Windows10下mysql 8.0.19 winx64安装教程及修改初始密码

    2024-01-26 11:03:37
  • 一文带你了解Golang中的并发性

    2024-04-30 10:00:45
  • 解决idea打开窗口/tab过多导致隐藏的问题

    2022-12-29 10:45:42
  • asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法

    2022-05-19 17:08:22
  • Flask框架 CSRF 保护实现方法详解

    2021-07-05 08:27:05
  • asp之家 网络编程 m.aspxhome.com