一、源码思路分析总结 概要: jQuery的核心思想可以简单概括为“查询和操作dom”,今天主要是分析一下jQuery.prototype.init选择器构造函数,处理选择器函数中的参数; 这个函数的参数就是jQuery()===$()执行函数中的参数,可以先看我之前写的浅析jQuery基础框架一文,了解基础框架后,再看此文。 思路分析: 以下是几种jQuery的使用情况(用于查询dom),每种情况都返回一个选择器实例(习惯称jQuery对象(一个nodeList对象),该对象包...
注:翻译之中有什么不恰当的地方,欢迎大家指正,祝大家双节快乐! 如果不是有特殊需要而去扩展原生对象和原型(prototype)的做法是不好的 代码如下://不要这样做 Array.prototype.map = function() { // 一些代码 }; 除非这样做是值得的,例如,向一些旧的浏览器中添加一些ECMAScript5中的方法。 在这种情况下,我们一般这样做: 代码如下:if (!Array.prototype.map) { Array.prototype.map = function() { //一些代码 }; } ...
这里讨论下对象的内部原型(__proto__)和构造器的原型(prototype)的关系。 一、所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 代码如下:Number.__proto__ === Function.prototype // true Boolean.__proto__ === Function.prototype // true String.__proto__ === Function.prototype // true Object.__proto__ === Function.prototype // true Function.__proto__ === Function.proto...
每个函数创建时默认带有一个prototype属性,其中包含一个constructor属性,和一个指向Object对象的隐藏属性__proto__。constructor属性的值为该函数的对象。在一个函数前面加上new来调用,则会创建一个隐藏连接到该函数prototype成员的新对象(由__proto__属性来链接),同时函数的this将会被绑定到那个新对象上。 函数总是返回一个值;如果没有指定返回值,就返回undefined;如果当做构造函数来调用,且返回值不是对象,则返回thi...
ECMAScript 5.1规范15.4.4.4 中说到: 代码如下:concat函数是有意设计成通用的;它并不要求它的this值必须得是个Array对象.因此,它可以被转移到其它类型的对象上作为方法来调用. 本文中的代码都使用了[]来作为Array.prototype的快捷方式.这已经是很常用的技巧了,虽然可读性差点:你通过一个对象实例访问到了Array.prototype上的方法.但是,这样的访问方式在现代的JavaScript引擎中非常之快,以至于我怀疑,说不定在这种调用方式下,这些Ja...
我们在定义函数的时候,函数定义的时候函数本身就会默认有一个prototype的属性,而我们如果用new 运算符来生成一个对象的时候就没有prototype属性。我们来看一个例子,来说明这个 代码如下:function a(c){ this.b = c; this.d =function(){ alert(this.b); } } var obj = new a(test); alert(typeof obj.prototype);//undefine alert(typeof a.prototype);//object 从上面的例子可以看出函数的prototype 属性又指向了一个对象,这...
Ajax 这个词听了不少,但是其实并没有真的接触过,于是在这里稍微了解一下。 Ajax技术的创新之处在于,改善了传统的“请求-等待-响应-刷新-返回数据”模式,在信息返回之前,用户可以继续自己的操作,当前页面不会因为请求而刷新。这样大大的提高了交互性。 Ajax其实并不是一个技术,而是由许多技术组成的。最大的特色之一就是可以异步传输,实现多线程服务。 Ajax的异步传输,依靠的是js中的XMLHttpRequst对象,于是我们从它入手。...
其实,关于prototype只要几句话就可以总结: 任何原型都是对象,只有对象有原型 只有Function有prototype属性,它是这个Function作为构造器时生成对象所继承的原型。Function的原型和它的prototype属性无关 对象的原型可以通过非标准的属性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 访问。 1其实是错的,Object这个原型链尽头的对象它没有原型。可是为了更简单表述。在看原型链后你就会明白.toString()这类没有定义...
在javascript中,根本找不到Enumerable的影子,因为这一块是Prototype作者从Ruby中借鉴过来的。并且Enumerable在实际中根本没有直接应用的机会,都是混入到其他的对象中,可以说是其他对象的一个“父类”(不过只是调用了Object的extend方法,进行了方法的直接拷贝而已)。 我并不熟悉Ruby,不过看Enumerable中的一些方法,倒是跟Python中的有几分相似。 Enumerable其中一个最重要的方法是each,each这个方法应该都比较熟悉...
添加到String.prototype中的方法比较多,不过归结起来,大致分为下面几类:分类 方法名 原始能力增强 strip | include | startsWith | endsWith | empty | blank格式 camelize | capitalize | underscore | dasherize | inspect 变形 toArray | succ | times替换 interpolate | sub | scan | truncate | gsubHTML处理 stripTags | escapeHTML | unescapeHTML参数序列化 toQueryParamsJSON...
格式 camelize | capitalize | underscore | dasherize | inspect 变形 toArray | succ | times这里面一个有用的方法是inspect,按照参考手册的说明,他的作用是“返回该字符串针对调试的字符串表现形式(即用单引号或双引号包括起来,并使用 '\' 对特殊字符进行转义)”,在Object的toJSON里面也涉及到这个方法。 既然涉及到需要转义的字符,我们自然要一份转义字符信息,下面直接给出: 代码如下:String.spec...
Number部分方法比较少,一共有8个: toColorPart: 将 Number 对象转换为具有两位数字的十六进制形式 succ: 返回当前 Number 对象的下一个值,即当前值加一 times: 采用 Ruby 的风格来封装一个标准的 [0...n] 循环 toPaddedString:将当前 Number 对象转换为字符串,如果转换后的字符串长度小于 length 指定的值,则用 0 在左边补足其余的位数 abs: 返回当前 Number 对象的绝对值。 round: 返回当前 Number 对象四舍五入后的整数值。...
替换 interpolate | sub | scan | truncate | gsubinterpolate : 将字符串看作一个模板,并使用 object 的属性填充它。 sub : 将字符串中前指定个个与 pattern 指定的模式匹配的子串用 replacement 替换 scan : 遍历字符串中与参数 pattern 指定的模式匹配的所有子串。返回原始字符串本身。 truncate : 将字符串截短为指定的长度(包含后缀部分), 并添加一个后缀。 gsub :将字符串中所有与 pattern 指定的模式匹配的值全...
前面each方法中掉了一个方面没有说,就是源码中的$break和$continue。这两个变量是预定义的,其作用相当于普通循环里面的break和continue语句的作用。出于效率的考虑,在某些操作中并不需要完全遍历一个集合(不局限于一个数组),所以break和continue还是很必要的。 对于一个循环来说,对比下面几种退出循环的方式: 代码如下:var array_1 = [1,2,3]; var array_2 = [a,b,c]; (function(){ for(var i = 0, len = array_1.length;...
用过Prototype的人都知道,里面有个类叫做Template,用法示例如下: 代码如下:var str = #{what} may have gone, but there is a time of #{how}; var object = { what : Swallows, how : return } var template_1 = new Template(str); var result = template_1.evaluate(object); console.log(result:,result); //输出:'Swallows may have gone, but there is a time of return' 这么挺方便的,所以下面就简单的分析一下实现原...