摘要: 今天看Sizzle代码的时候,里面有这么一段:// Here we check if the JavaScript engine is using some sort of// optimization where it does not always call our comparision// function. If that is the case, discard the hasDuplicate value.// Thus far that includes Google Chrome.[0, 0].sort(function() { baseHasDuplicate =... 阅读全文
posted @ 2012-02-03 13:24 西山 阅读(1139) 评论(2) 推荐(0) 编辑
摘要: Hash是Prototype作者扩展出来的一个数据类型。本质上他就是一个普通的javascript对象(注:不要纠结什么javascript变量都是对象,这里说new Object()那种),然后在这个对象上面扩展出来一些其他的方法。基本原理基本的原理的代码说明就是: function Hash(object){ this._object = object; } Hash.prototype = { constructor : Hash, method_1 : function(){//this._object}, me... 阅读全文
posted @ 2012-01-31 13:27 西山 阅读(2335) 评论(0) 推荐(1) 编辑
摘要: 现在来看Enumerable剩下的方法toArray | size | inspectinject | invoke | sortBy | eachSlice | inGroupsOf | plunk | zip前面说过map的原理,不管原来的集合是什么,调用map之后返回的结果就是一个数组,其中数组的每一项都是经过interator处理了的,如果不提供interator那么默认使用Prototype.K,此时的作用很明显,返回的结果就是原来集合的数组形式。原来的集合中length属性为多少,返回结果数组的length就是多少。这个特殊情况被作为一个方法独立出来,叫做toArray: fun. 阅读全文
posted @ 2012-01-19 09:58 西山 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 剩下的方法太多,于是分作两部分。亮点就是$break和$continue,以及grep方法的思想。 前面each方法中掉了一个方面没有说,就是源码中的$break和$continue。这两个变量是预定义的,其作用相当于普通循环里面的break和continue语句的作用。出于效率的考虑,在某些操作中并不需要完全遍历一个集合(不局限于一个数组),所以break和continue还是很必要的。对于一个循环来说,对比下面几种退出循环的方式: var array_1 = [1,2,3]; var array_2 = ['a','b','c']; (fun 阅读全文
posted @ 2012-01-17 15:09 西山 阅读(461) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2012-01-17 00:02 西山 阅读(482) 评论(10) 推荐(1) 编辑
摘要: 在javascript中,根本找不到Enumerable的影子,因为这一块是Prototype作者从Ruby中借鉴过来的。并且Enumerable在实际中根本没有直接应用的机会,都是混入到其他的对象中,可以说是其他对象的一个“父类”(不过只是调用了Object的extend方法,进行了方法的直接拷贝而已)。 我并不熟悉Ruby,不过看Enumerable中的一些方法,倒是跟Python中的有几分相似。 Enumerable其中一个最重要的方法是each,each这个方法应该都比较熟悉,其作用便是遍历一个序列的所有元素,并进行相应的处理。不过多数是应用在数组上,比如原生数组的forEac... 阅读全文
posted @ 2012-01-16 00:56 西山 阅读(938) 评论(1) 推荐(0) 编辑
摘要: Prototype在原生对象的基础上扩展,分别是Object,Function,String,Number,Array,Date,前面分析了Object,Function,String,还剩下Number,Array,Date。Number部分方法比较少,一共有8个: toColorPart: 将 Number 对象转换为具有两位数字的十六进制形式 succ: 返回当前 Number 对象的下一个值,即当前值加一 times: 采用 Ruby 的风格来封装一个标准的 [0...n] 循环 toPaddedString:将当前 Number 对象转换为... 阅读全文
posted @ 2012-01-14 21:11 西山 阅读(1142) 评论(0) 推荐(0) 编辑
摘要: 今天在群里讨论alert的问题,说到了alert的改造,虽然说改造原生方法不是好做法,但是既然提到了就可以讨论下,所以我按照他们的讨论给出了下面的一段代码: var _alert = window.alert; window.alert = function(param,isDebug){ if(isDebug){ console.log(param); }else{ _alert(param); } } alert('x'); alert('x',true); alert... 阅读全文
posted @ 2012-01-13 20:56 西山 阅读(830) 评论(1) 推荐(1) 编辑
摘要: 替换interpolate|sub|scan|truncate | gsubinterpolate :将字符串看作一个模板,并使用 object 的属性填充它。sub :将字符串中前指定个个与 pattern 指定的模式匹配的子串用 replacement 替换scan :遍历字符串中与参数 pattern 指定的模式匹配的所有子串。返回原始字符串本身。truncate :将字符串截短为指定的长度(包含后缀部分), 并添加一个后缀。gsub :将字符串中所有与 pattern 指定的模式匹配的值全部用 replacement 替换掉上面的方法中,最重要的一个方法是gsub,具体说明参见《浅析P 阅读全文
posted @ 2012-01-12 13:11 西山 阅读(534) 评论(0) 推荐(1) 编辑
摘要: HTML处理stripTags|escapeHTML|unescapeHTMLJSON处理unfilterJSON|isJSON|evalJSON|parseJSON脚本处理stripScripts|extractScripts|evalScripts 现在,String部分转入具体的关联应用,分别对应HTML字符串,JSON字符串和HTML中的脚本字符串。【乱入一句,有关JSON的一点东西,可以看看http://www.cnblogs.com/TomXu/archive/2012/01/11/2311956.html】下面分别叙述:一、HTML字符串stripTags :移除字符串中所有的 阅读全文
posted @ 2012-01-12 10:25 西山 阅读(861) 评论(0) 推荐(0) 编辑