jQuery Mobile

让你我减少对jQuery的依赖度

时间:2024-09-21 04:56:20 jQuery Mobile 我要投稿
  • 相关推荐

让你我减少对jQuery的依赖度

  虽然现在慢慢减少了对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;

  }

【让你我减少对jQuery的依赖度】相关文章:

宝洁供应链通过优化减少库存案例解析04-04