YUI有一个mix方法:
Applies the supplier's properties to the receiver. By default all prototype and static propertes on the supplier are applied to the corresponding spot on the receiver. By default all properties are applied, and a property that is already on the reciever will not be overwritten. The default behavior can be modified by supplying the appropriate parameters.
这个方法可以使receiver接受supplier的属性和方法。默认情况下supplier上面的原型和静态属性会应用到receriver相应的属性上面,默认情况所有的属性都会被接受,receiver上面已有属性不会被覆写。
YUI.mix(r,s,ov,wl,mode,merge);
主要的和最常用的参数是r和s两个
r是receiver
s时supplier
ov是一个对象,标识要要覆盖的属性
wl是一个白名单,
mode是覆盖的模式
merge是一个布尔值,标示是否要对属性对象也做合并
看看里面的几种覆盖时如何实现的
Y.mix = function(r, s, ov, wl, mode, merge) {
if (!s || !r) {
return r || Y;
}
//根据模式来判断,默认是Obj to Obj的
if (mode) {
switch (mode) {
case 1: // proto to proto
return Y.mix(r.prototype, s.prototype, ov, wl, 0, merge);
case 2: // object to object and proto to proto
Y.mix(r.prototype, s.prototype, ov, wl, 0, merge);
break; // pass through
case 3: // proto to static
return Y.mix(r, s.prototype, ov, wl, 0, merge);
case 4: // static to proto
return Y.mix(r.prototype, s, ov, wl, 0, merge);
default: // object to object is what happens below
}
}
// Maybe don't even need this wl && wl.length check anymore??
var i, l, p, type;
//白名单如果有值,就对白名单里面的属性进行合并,如果有ov,那么就
if (wl && wl.length) {
for (i = 0, l = wl.length; i < l; ++i) {
p = wl[i];
type = Y.Lang.type(r[p]);//看具体的属性是什么类型的
if (s.hasOwnProperty(p)) {//如果这个属性是p自己的
if (merge && type == 'object') {//如果设定了merge并且属性是一个对象,那么就调用mix本身,把s[p]的属性加到r[p]上面
Y.mix(r[p], s[p]);
} else if (ov || !(p in r)) {//如果允许ov或者r里面没有p,那么就在r里面加上p这个属性
r[p] = s[p];
}
}
}
} else {//如果没有wl
for (i in s) {//遍历s里面的属性
if (s.hasOwnProperty(i)) {//如果i是s本身的属性,就按规则合并属性
if (merge && Y.Lang.isObject(r[i], true)) {
Y.mix(r[i], s[i], ov, wl, 0, true); // recursive
} else if (ov || !(i in r)) {
r[i] = s[i];
}
}
}
if (Y.UA.ie) {//如果时IE,做一个修正。
_iefix(r, s);
}
}
return r;
};
_iefix = function(r, s) {
var fn = s.toString;
if (Y.Lang.isFunction(fn) && fn != Object.prototype.toString) {
r.toString = fn;
}
};
ie不会枚举javascript对象上面的native属性,即便这个属性被重写过。
YUI的_iefix对toString做了一个处理。
分享到:
相关推荐
在"YUI js方法使用例子"中,我们可以通过以下步骤来体验YUI的强大功能: 1. **引入YUI**:在HTML文件中,通过`<script>`标签引入YUI库,可以选择性地加载所需模块。 ```html <script src="http://yui.yahooapis....
在“yui3-master.zip”的“node”模块中,可以找到`Y.Node`, `Y.all`等方法,它们使得DOM操作更加符合JavaScript的编程习惯。 5. **动画效果** YUI3还包含了丰富的动画功能,如“anim”模块,能够实现复杂的CSS...
《深入理解YUI 3.9.0 r2:界面设计与资源优化》 YUI,全称为Yahoo! User Interface Library,是由雅虎公司开发的一个开源JavaScript库,它旨在简化Web应用程序的构建,特别是对于界面设计和交互效果的实现。在3.9.0...
《深入理解YUI:基于“yui.rar 例子”的解析》 YUI,全称Yahoo! User Interface Library,是雅虎公司推出的一款开源JavaScript库,旨在帮助开发者构建高性能、易于维护的网页应用。本篇文章将结合“yui.rar 例子”...
《YUI使用文档》汉语版是一份详细的YUI学习材料,它涵盖了这个JavaScript库的核心功能和使用方法。YUI,全称Yahoo! User Interface Library,是Yahoo开发的一个开放源代码的JavaScript库,旨在帮助开发者创建交互式...
yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...
- 可以使用YUI的`on`方法或Node实例上的`on`方法来绑定事件处理程序。 - 参数包括事件类型、事件处理函数、目标元素等。 - 示例: ```javascript Y.on('click', function (e) { console.log('Clicked!'); }, ...
模块可以通过`YUI.use()`方法来加载,实现了代码的异步加载和依赖管理。 2. **事件系统**:YUI的事件处理机制强大且灵活,支持DOM事件、自定义事件以及事件委托,使事件绑定和解绑变得简单易行。 3. **DOM操作**:...
通过提供的压缩包文件"ext 2.rar"、"ext教程.rar"和"yui_2.3.1.zip",你可以获得YUI-EXT的源码、文档和示例,进一步学习和研究其使用方法。这些资源将帮助你深入理解如何集成YUI-EXT到项目中,如何创建和配置组件,...
1. **模块系统**:YUI3引入了CommonJS风格的模块系统,允许开发者通过`YUI.use()`方法加载所需模块,实现按需加载,减少页面初始化时的加载量。 2. **事件处理**:YUI3提供了强大的事件系统,支持DOM事件、自定义...
1. **YUI库**:了解YUI的基本结构、模块化设计和如何引入到项目中,是使用YUI表单验证器的前提。 2. **表单验证**:表单验证的常见规则包括非空检查、长度限制、格式验证(如邮箱、电话号码等)和自定义验证函数。 3...
YUI 库,全称Yahoo! UI Library。是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两...
YUI安装文档.doc 提供了详细的安装和使用指南,包括如何配置环境、运行工具以及解决常见问题的方法。对于初次使用者来说,这份文档是了解和上手YUI打包工具的重要参考资料。 yuicompressor-2.4.7.jar 和 yui...
**YUI Compressor:JavaScript与CSS的压缩利器** YUI Compressor是一款强大的JavaScript和CSS压缩工具,由雅虎(Yahoo!)开发并开源。它的主要功能是通过删除代码中的空白符、注释以及不必要的字符,将文件大小压缩...
《yuicompressor-2.4.8.jar:前端优化与代码压缩的艺术》 在Web开发领域,优化前端性能是一项至关重要的任务,而yuicompressor-2.4.8.jar正是这样一款强大的工具,专为JavaScript代码压缩而设计,助力开发者实现...
`YAHOO.util.Connect`是YUI的基础Ajax功能,它提供了发起HTTP请求并处理响应的方法,支持GET、POST等多种HTTP方法,同时提供了异步请求的状态管理和回调机制。`YAHOO.widget.DataSource`则用于管理数据源,它可以与...
3. Connection Manager:此组件用于处理Ajax请求,提供了异步与服务器通信的能力,支持GET、POST等多种HTTP方法,同时具有错误处理和状态监控功能。 4. Animation:动画模块是YUI的一大亮点,它允许开发者轻松创建...
1. **模块系统**:YUI 3.8.1采用CommonJS规范,通过YUI.use()方法按需加载模块,降低初始页面加载时间。此外,还支持AMD(异步模块定义)模式,适应不同的开发需求。 2. **事件处理**:YUI提供了一套完整的事件系统...
**YUI 2.7:一个全面的JavaScript和CSS框架** YUI(Yahoo! User Interface Library)是雅虎公司开发的一个开源的JavaScript和CSS库,它为构建高性能、跨平台的Web应用程序提供了丰富的工具和资源。YUI 2.7是这个库...
YUI 2 is a JavaScript and CSS library with more than 30 unique components including low-level DOM utilities and high-level user-interface widgets. Currently at version 2.9.0, YUI 2 is robust, proven, ...