作家
登录

JavaScript对象链式操作代码(jquery)

作者: 来源:www.28hudong.com 2013-03-30 01:28:15 阅读 我要评论

虽然现在慢慢减少了对jQuery的使用(项目上还是用,效率高点。平时基本不用了),希望从而减少对jQuery的依赖度。 但是这链式操作的方式实在吸引人(貌似现在不少新库都采用了链式操作)。 新手无畏嘛,所以写了以下代码。主要是避免以后又忘了,呵呵。 复制代码 代码如下: window.k = function() { return new k.fn.init(arguments); } k.fn = k.prototype = { init:function() { this.length = 0; //var args = Array.prototype.slice.call(arguments,0); Array.prototype.push.apply(this,arguments[0]); return this; }, show:function() { console.log(Array.prototype.slice.call(this,0).join("$")); return this; }, hide:function() { console.log(this); return this; } } k.fn.init.prototype = k.fn; console.log(k("0",1,2,3,4,5).show().hide()); 这只是进行了链式操作。但是在firbug下可以看到jQuery对象返回的是数组/类数组。要实现这个却不知道怎么办好。。 总不能让k.fn.prototype = new Array()吧。真要看jQuery源代码还真是有点累。。 下面是针对网友的一些回复 其实链式操作很简单,就是每次返回操作对象本身,这样就可以持续的调用该对象本身定义的所有方法了。 最简单的例子: 复制代码 代码如下: var o = function() { /** do something */ return this; } o.prototype = { action1: function() { /** do something */ return this; }, action2: function() { /** do something */ return this; } } 你可以这样调用: new o() // .action1() // .action2(); //每一步操作返回的都是实例化的o对象 它其实等同于这样: var a = new o();//如果没有返回this,那么就不能在这里继续调用了。因为返回的是undefined。 a.action1(); //这个时候就只能对a(实例化的o对象的引用)来操作。 a.action2(); 如果你用过jQuery就应该发现了。jQuery并不需要你使用new来实例化一个对象,在使用的时候显得更方便。 所以我们定义另一个对象来封装上面提到的o对象: var k = function() { return new o(); } 这样我们就可以这样调用了: k().action1().action2(); 我为你推荐 一个叫 "函数化"的 构造JS的方法。 复制代码 代码如下: //加粗表示强调 //这个方法是 《javascript语言精粹》第52页 5.4函数化 上的。 var constructor = function (spec,my){ var that,其他的私有实例变量; my = my || {}; 把共享的变量和函数添加到my中 that = 一个新对象 添加给that 的特权方法 return that; }

  推荐阅读

  JavaScript 递增、递减运算符实例

递增、递减运算符 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]>>>详细阅读


本文标题:JavaScript对象链式操作代码(jquery)

地址:http://www.17bianji.com/kaifa2/JS/26078.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)