[转帖]Mootools源码分析-02 -- Utils

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-400118

原作者:我佛山人

 

 

//检查对象是否已经定义或者已经赋值
function $chk(obj)    {
    
return !!(obj || ōbj === 0);
};

//通用清除计时器的方法,即能清setTimeout,又能清setInterval,即使计时器不存在也不会报错
function $clear(timer)    {
    clearTimeout(timer);
    clearInterval(timer);
    
return null;
};

/*
检查对象属性是否已初始化/定义,注意只能检查对象的属性,不能直接检查变量
因为未定义变量在调用本方法前便会抛出错误,切记
*/
function $defined(obj)    {
    
return (obj != undefined);
};

//一个空的函数,主要用于事件的初始化
function $empty()    {};

//闭包应用,延后取指定的参数值
function $arguments(i)    {
    
return function()    {
        
return arguments[i];
    };
};

//lambda(匿名)函数,将指定变量函数化,保证返回一个function对象,类似$splat,将变量数组化
function $lambda(value)    {
    
return (typeof value == 'function'? value : function()    {
        
return value;
    };
};

//浅拷贝扩展,不考虑object型属性的,只是简单的覆盖
function $extend(original, extended)    {
    
for (var key in (extended || {}))    original[key] = extended[key];
    
return original;
};

//解链对象,主要是解决object类型的变量赋值时会影响原值的问题,所以修改其实我觉得叫clone的话更明了
function $unlink(object)    {
    
var unlinked = null;

    
switch ($type(object))    {
    
case 'object':
        unlinked 
= {};

        
//深拷贝
        for (var p in object)    unlinked[p] = $unlink(object[p]);
        
break;
    
case 'hash':

        
//深拷贝
        unlinked = $unlink(object.getClean());
        
break;
    
case 'array':
        unlinked 
= [];

        
//深拷贝
        for (var i = 0, l = object.length; i < l; i++)    unlinked[i] = $unlink(object[i]);
        
break;
    
default:
        
return object;
    }

    
return unlinked;
};

//合并所有对象,参数位置越后优先级越高,就是说后面的参数对象属性会覆盖前面的,注意用到了$unlink
function $merge()    {
    
var mix = {};
    
for (var i = 0, l = arguments.length; i < l; i++)    {
        
var ōbject = arguments[i];
        
if ($type(object) != 'object'continue;
        
for (var key in object)    {
            
var ōp = object[key], mp = mix[key];
            mix[key] 
= (mp && $type(op) == 'object' && $type(mp) == 'object'? $merge(mp, op) : $unlink(op);
        }
    }
    
return mix;
};

//返回参数列表中从左到右第一个已定义的表达式的值
function $pick()    {
    
for (var i = 0, l = arguments.length; i < l; i++)    {
        
if ($defined(arguments[i]))    return arguments[i];
    }
    
return null;
};

//在min到max之间取一个随机数
function $random(min, max)    {
    
return Math.floor(Math.random() * (max - min + 1+ min);
};

//变量数组化,通常用于保证之后的代码能执行数组的each方法
function $splat(obj)    {
    
var type = $type(obj);
    
return (type) ? ((type != 'array' && type != 'arguments'? [obj] : obj) : [];
};

//当前的时间截,Fx中的时间周期判断使用较多
var $time = Date.now || function()    {
    
return new Date().getTime();
};

//依次尝试执行参数列表中的函数,与Prototype的Try.these异工同曲之妙,只是更简练
function $try()    {
    
for (var i = 0, l = arguments.length; i < l; i++)    {
        
try {
            
return arguments[i]();
        } 
catch(e)    {}
    }
    
return null;
};

//判断对象类型,JS中很多类型typeof都是object,无法精确判断,但是因为有Native的实现,使精确判断类型成为了可能
function $type(obj)    {
    
if (obj == undefined)    return false;

    
//此行代码的实现有赖于Native的创意
    if (obj.$family)
        
return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
    
if (obj.nodeName)    {
        
switch (obj.nodeType)    {
        
case 1return 'element';
        
case 3return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
        }
    } 
else if (typeof obj.length == 'number')    {
        
if (obj.callee) return 'arguments';
        
else if (obj.item) return 'collection';
    }
    
return typeof obj;
};

 

转载于:https://www.cnblogs.com/maapaa/articles/mootools-s-2.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios realm 文件_iOS Realm数据库使用

Realm 是 SQLite 和 Core Data 的替代者&#xff0c;得益于其零拷贝的设计&#xff0c;Realm 比任何 ORM 都要快很多。Objective‑C版本的 Realm 能够让您以一种安全、耐用以及迅捷的方式来高效地编写应用的数据模型层&#xff0c;如下例所示&#xff1a;Dog.hinterface Dog : …

李宏毅机器学习(十一)meta-learning和ML一样是三个步骤

Meta-learning就是教会它怎么学&#xff01; 大家以为AI都是很牛&#xff0c;但其实就是在调参&#xff0c;在工业界怎么样子调参呢&#xff1f; 使用1000GPUs&#xff0c;而学业界只有一张&#xff01; 我们知道Machine learning可以学出来&#xff0c;那么hyperparameters是…

教育的真谛

湖畔疑云 大学将是你人生最重要的时光&#xff0c;在大学里你会发现学习的真谛。你以前经常会问到 “这个课程有什么用”&#xff0c;这是个好问题&#xff0c;但是我希望你理解&#xff1a;“教育的真谛就是当你忘记一切所学到的东西之后所剩下的东西。”我的意思是&#xff0…

LeetCode 748. 最短完整词

1. 题目 如果单词列表&#xff08;words&#xff09;中的一个单词包含牌照&#xff08;licensePlate&#xff09;中所有的字母&#xff0c;那么我们称之为完整词。 在所有完整词中&#xff0c;最短的单词我们称之为最短完整词。 单词在匹配牌照中的字母时不区分大小写&#x…

单反录像按钮在哪_单反与微单到底哪不同

数码相机发展到现在从卡片相机到单反相机然后到微单相机&#xff0c;而单反相机和微单相机都是比较专业的数码相机&#xff0c;具有很好的操作性能&#xff0c;那么单反与微单的区别到底在哪或是单反与微单到底哪不同呢&#xff1f;接下来我们就来看看。单反和微单主要的区别就…

(十四)【RecSys 2016】Personalized Recommendations using Knowledge Graphs: A Probabilistic【看不懂】

题目&#xff1a; Personalized Recommendations using Knowledge Graphs: A Probabilistic Logic Programming Approach&#xff08;一种概率逻辑编程方法&#xff09; 论文链接&#xff1a; 代码&#xff1a; 想法 &#xff08;1&#xff09;推荐系统就是求出user和item的特…

Flash 杂志《summer tree》 第六期发布

经过几天的排版&#xff0c;Summer Tree 第六期出来了&#xff0c;在这里感谢Anson和Star的帮助。 封面拿了一张底贴上去&#xff0c;基本上无点ps &#xff0c;实在无什么美感可言。暂时忍耐一下。 Anson的博客&#xff1a;http://blog.csdn.net/kongweian 下载地址&#xff1…

利用瑞利里兹方法计算固有频率的程序_不可不知的电机磁致伸缩计算方法

磁致伸缩是指电机硅钢片铁芯在交变磁场的作用下&#xff0c;发生微小的尺寸变化的现象&#xff0c;磁致伸缩使铁心随励磁频率的变化做周期性振动。本文主要研究磁致伸缩力和麦克斯韦力对电机振动噪声的贡献&#xff0c;从而对电机的振动噪声控制提供依据。分析必要性电机的振动…

LeetCode 917. 仅仅反转字母

1. 题目 给定一个字符串 S&#xff0c;返回 “反转后的” 字符串&#xff0c;其中不是字母的字符都保留在原地&#xff0c;而所有字母的位置发生反转。 示例 1&#xff1a; 输入&#xff1a;"ab-cd" 输出&#xff1a;"dc-ba"示例 2&#xff1a; 输入&…

oracle table 函数使用

PL/SQL表---table()函数用法 /*PL/SQL表---table()函数用法&#xff1a;利用table()函数&#xff0c;我们可以将PL/SQL返回的结果集代替table。oracle内存表在查询和报表的时候用的比较多&#xff0c;它的速度相对物理表要快几十倍。simple example&#xff1a;1、table()结合数…

64位进程隐藏不蓝屏_浅析Linux 64位系统虚拟地址和物理地址的映射及验证方法...

前言有好久没更新了&#xff0c;这段时间发生了挺多大喜事哈。但是也还是有挺久没更新了&#xff0c;不得不意识到自己是个小菜鸡&#xff0c;就算是小菜鸡也要做一只快乐小菜鸡。就算更新慢但是我依然会持续更新&#xff0c;因为更文使我快乐。虚拟内存先简单介绍一下操作系统…

知识图谱论文阅读(十五)【arxiv】A Survey on Knowledge Graph-Based Recommender Systems

论文题目&#xff1a; A Survey on Knowledge Graph-Based Recommender Systems 论文链接&#xff1a; 论文代码&#xff1a; 想法 出现Refine就是用某些方法更好的优化特征表示embed的意思就是变成低维向量&#xff01; 论文 摘要 难点&#xff1a; 当今推荐系统的难点 &…

LeetCode 921. 使括号有效的最少添加(栈)

1. 题目 给定一个由 ( 和 ) 括号组成的字符串 S&#xff0c;我们需要添加最少的括号&#xff08; ( 或是 )&#xff0c;可以在任何位置&#xff09;&#xff0c;以使得到的括号字符串有效。 从形式上讲&#xff0c;只有满足下面几点之一&#xff0c;括号字符串才是有效的&…

Shlwapi介绍

Windows中有一个Shlwapi.dll文件&#xff0c;包含了大量的Windows字符串处理方法&#xff0c;这些方法&#xff0c;在通常的程序应用中&#xff0c;经常会用到&#xff0c;有一部分处理方法&#xff0c;在CRuntime中也存在&#xff0c;但不方便使用。有一部分函数&#xff0c;也…

java权限框架_Java高级工程师必备技术栈-由浅入深掌握Shiro权限框架

权限系统在任何一个系统中都存在&#xff0c;随着分布式系统的大行其道&#xff0c;权限系统也趋向服务化&#xff0c;对于一个高级工程师来说&#xff0c;权限系统的设计是必不可少需要掌握的技术栈Apache Shiro™是一个功能强大且易于使用的Java安全框架&#xff0c;用于执行…

【RippleNet】(一)preprocessor.py【未完】

首先读入的文件有movie和book和news三种&#xff0c;肯定会选择一种进行解析&#xff01; 下面我们以movies作为样例分析&#xff1a; 本论文中使用的数据集是movie-1m ratings.dat&#xff1a; 分别是用户&#xff1a;&#xff1a;电影&#xff1a;&#xff1a;评分&#xff…

LeetCode 961. 重复 N 次的元素

1. 题目 在大小为 2N 的数组 A 中有 N1 个不同的元素&#xff0c;其中有一个元素重复了 N 次。 返回重复了 N 次的那个元素。 示例 1&#xff1a; 输入&#xff1a;[1,2,3,3] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;[2,1,2,5,3,2] 输出&#xff1a;2示例 3&a…

日照华软游戏开发价格_开发区将是未来刚需人群的首选!

开发区真的只是备胎吗?想必在日照人的心目中一定有一张区域排行榜&#xff0c;而排在榜首的一定是东城片区&#xff0c;这是无可厚非的&#xff0c;毕竟东城片区的各项资源是全市其他区域无法抗衡的&#xff0c;然后西城片区、山海天片区、石臼片区……紧随其后&#xff0c;而…

知识图谱论文阅读(十六)【WWW2019】Knowledge Graph Convolutional Networks for Recommender

题目&#xff1a; KGCN 论文链接&#xff1a; 代码链接&#xff1a;https://github.com/hwwang55/KGCN 想法 高阶的意思就是multi-hop的意思注意是从外向里聚合的&#xff0c;第h-1跳是外侧&#xff0c;第h跳是里侧&#xff01; 所以才有聚合邻居和本身之说 创新 摘要 为了…

LeetCode 925. 长按键入(双指针)

1. 题目 你的朋友正在使用键盘输入他的名字 name。 偶尔&#xff0c;在键入字符 c 时&#xff0c;按键可能会被长按&#xff0c;而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。 如果它对应的可能是你的朋友的名字&#xff08;其中一些字符可能被长按&#…