学习zepto.js(原型方法)

学习zepto.js(原型方法)[1] 转载

新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法:

$.camelCase():

方法接收一个字符串,将连字符格式的字符串转为驼峰格式的字符串:

$.camelCase("login-name"); // ->loginName $.camelCase("loginName"); // ->不作处理

(本人发现zepto中的原型方法都是通过将匿名函数赋值给变量的方式来进行声明的,而直接使用function声明的函数在外部是获取不到的)解释的不详细,是因为原型方法都有一个原型的引用,而那些普通函数没有做这个引用,好区分而已

通过一个正则匹配连字符及后边的一个字符(如果有的话);

$.contains():

方法接受两个参数,均为Dom节点类型,检查第一个参数是否包含第二个参数;

$.contains(document.getElementsByTagName("html")[0],document.getElementsByTagName("body")[0])// 返回true $.contains(document.getElementsByTagName("body")[0],document.getElementsByTagName("html")[0])// 返回false $.contains(document.getElementsByTagName("body")[0],document.getElementsByTagName("body")[0])// 返回false

高性能JavaScript里边曾经提到过这种写法,一个方法需要做兼容处理时,写成这样会比较节省资源,而不是在方法内部判断并执行,因为用户在使用的过程中不可能更换浏览器(原话忘记了,差不多就是这意思.);

如果存在contains方法,这个就不多做解释了,浏览器内置了处理方法,包含为true,其余为false,

如果不存在,那么就需要自己去做一个方法来实现同样的功能(这应该就是兼容的意义所在吧)

只有一个问题,如果将两个参数位置颠倒或两个参数相等,则函数会循环至html元素才会停止(虽说这种情况会很少出现);

$.each():

方法用于循环数组或json,传入两个参数,第一个是要循环的对象,第二个是回调函数(每次循环都会执行一次迭代),zepto会通过当前循环对象执行回调并传入两个参数,第一个是数组中的下标或者json中的key,第二个参数为当前对象的值,回调中可以返回一个bool值,如果返回false,则会终止当前循环并返回当前对象(第一个参数);

$.each([123], function (index, item) {   console.log(this+"|"+index+"|"+item) ;//123|0|123 }); $.each({name:‘niko‘,age:18}, function (key, value) {   console.log(this+"|"+key+"|"+value) ;//niko|name|niko 

}); $.each([123,233], function () { 

  if(this === 233) return false;//有效值仅仅为false,其余均忽视 });

//回调函数中的命名是无所谓的,a|b都是可以的,但是合理的命名能让其他看到这段代码的同学明白你要做的事情;

likeArray函数就不贴了,判断传入参数的length属性是否为number,所以说,像一些nodeList之类的也是可以放心使用$.each而不用担心方法会走for-in循环,如果数组顺序对逻辑的执行没有影响还是推荐自己写一个for循环或while循环,如下:

var array = [1,2]; for (var length = array.length - 1; length >= 0; length--) { //do..  } var length = array.length; while (length--) { //do...  }

//递减的性能要比递增的性能好点(说话不说那么绝对,不留下一个喷点- -)

$.extend():

该方法用来继承,也是扩展插件所需的方法,方法有效执行须接收两个以上的参数,第一个参数为目标对象,第二个以后的为来源,来源会覆盖目标的原有属性,默认为浅复制,如果想要深度复制,则将第一个参数设为true,然后是目标对象.来源...

var target = {}; $.extend(traget, {name:‘niko‘});//浅复制 $.extend(true, target, {name:‘niko‘});//深度复制()

方法的执行过程为先将除了第一个参数以外所有的参数取出作为来源值(默认认为是浅复制),然后判断target是否为boolean类型的值,如果是,则将deep变量赋值为target,并将target赋值为来源值数组中的第一个([].shift(),将数组中第一个元素从数组中删除并返回);接下来循环来源值,调用extend方法;

extend方法接收三个参数,第一个为目标对象,第二个为来源值,第三个是标识是否深度复制的.

方法将会枚举来源值,并判断是否为深度复制以及值是否为一个Object对象或数组,如果是的话,将会新创建一个Object或数组,然后递归调用extend方法,脱离引用关系(注:自定义对象将不会脱离引用关系);

否则就执行普通的复制;

 var target1 = {}; var target2 = {}; target1.quote = {   name : "name",   array : [1,2,3] }; target2.quote = {   name : "name",   array : [1,2,3] }; 

var copy = {}; var copy_deep = {}; $.extend(copy,target1); $.extend(true, copy_deep,target2); copy.quote.name = "change"; copy_deep.quote.name = "change"; copy.quote.array.push(4); copy_deep.quote.array.push(4); console.log(target1.quote); console.log(target2.quote);

该方法返回值接收不接收是无所谓的- -方法返回目标对象的原因是为了链式操作,经过extend以后直接使用即可.

$.fn:

这个不是一个方法,而是一个对象,指向Zepto对象的prototype,所以说,使用$.extend来使$.fn继承某些方法,进行扩展插件.

$.fn.alert = function () {   alert(this.html());//this指向调用该方法的Zepto对象 } $("<span>hello</span>").alert();//-->hello /*这种是直接给key赋值,如果有多个,须结合$.extend使用*/ $.extend($.fn, { alert : function () {     alert(this.html());//this指向调用该方法的Zepto对象   }, confirm : function () {     confirm(this.html());//this指向调用该方法的Zepto对象    } });

PS:为了配合链式操作,扩展的方法最好将this返回;

因为是个对象,所以就不贴码了.

每天自学一点.

时间: 2024-11-12 13:08:41

学习zepto.js(原型方法)的相关文章

学习zepto.js(原型方法)[1]

新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): 方法接收一个字符串,将连字符格式的字符串转为驼峰格式的字符串: $.camelCase("login-name"); // ->loginName $.camelCase("loginName"); // ->不作处理 (本人发现zepto中的原型方法都是通过将匿名函数赋值给变量的方式来进行声明的,而

学习zepto.js(原型方法)[2]

接着昨天的来,继续说原型方法,昨天的传送阵(昨天出了点小意外,博文经过WP手机的UC浏览器进行编辑后标签就露出来了- -,现已修复); $.grep(): 作用与Array.filter类似(其实就是调用的filter方法- -) 通过传入两个参数,第一个为类数组的对象,第二个为用来执行判断的函数; var array = [1,2,3,4,5]; var even = $.grep(array,function (value) { return value % 2 === 0; }); con

学习zepto.js(对象方法)[3]

继续说zepto里attributes的相关操作. attr,removeAttr,prop这三个方法. attr(): 三种用途 get: 返回值为一个string字符串 $("<span id="special"></span>").attr("id");//--> "special" 注意:只能返回对象中第一个节点的属性值 set: 返回值为一个zepto对象 $("<spa

学习zepto.js(对象方法)[5]

继续说. clone: 该方法不接收任何参数,会返回对象中的所有元素集合,但不会对象绑定的事件. var $temp = $("div").clone(); //并不接收任何参数. 方法的实现就是循环调用方法对象.然后将所有的dom元素克隆并返回 而且使用的深度克隆,就是说,会将节点下方的子节点统统克隆过来. closest: 方法接收1-2个参数,第一个为selector(选择器),第二个为context(上下文); 方法会从调用节点开始,逐级向上匹配. 如果只传入selector,

学习zepto.js(对象方法)[2]

今天来说下zepto那一套dom操作方法, prepend,append,prependTo,appendTo,before,after,insertBefore,insertAfter; 按着从内到外,从主到从,从前到后的顺序来说这八个方法. 这些方法的参数可以是一个dom节点,也可是是一个html片段,或者Zepto对象; prepend(): 将参数插入对象内部的头部; append(): 将参数插入对象内部的尾部; prependTo(): 将对象插入到参数内部的头部(可以理解为将pre

学习zepto.js(对象方法)[6]

first: 获取当前对象集合中的第一个dom元素. $("div").first(); // 返回第一个div对象(zepto对象) //相当于$("div").eq(0); 与之对应的是last last: 获取当前对象集合中的最后一个dom元素. $("div").last(); // 返回最后一个div对象(zepto对象) //相当于$("div").eq(-1); 两方法不接收任何参数. 个人认为调用isObjec

学习zepto.js(对象方法)[4]

今天说说那一套获取元素集合的一些方法: ["children", "clone", "closest", "contents", "empty", "eq", "filter", "find", "first", "get", "has", "last", "

学习zepto.js(对象方法)[1]

zepto也是使用的链式操作,链式操作:函数返回调用函数的对象. 但并不是所有的对象方法都可以进行链式操作,举几个例子:.size(),.html()|.text()//不传参数的情况下; 若非特殊说明,下边介绍的方法都会返回zepto对象; add(): 支持一到二个参数,第一个为选择器,与$()的规则相同,甚至是,第一个参数传进去一个function,它也会正确执行(后果自负- -),所以说,正确的使用方式是传入选择器,dom对象,或者一段html,这都是可以的,如果有多个,请用数组括起来,

学习zepto.js(Hello World)

Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. 昨天听说了zepto.js,正好最近也比较闲,所以就学习一下这个著名DOM操作库,由于本人刚接触这个,但又不想单纯的说如何使用,所以本人会按照API顺序来说明方法如何使用并试着将对于源码的理解写上来; $(): 与jQuery的$()几乎一样,但zepto的选择器是直接使用的原生querySelectorAll(),所以,一些jQuery自定