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

 更新时间:2010年07月04日 19:43:48   作者:  
自从使用了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;
}

相关文章

  • CLASS_CONFUSION JS混淆 全源码

    CLASS_CONFUSION JS混淆 全源码

    这里通过JS字符串替换、随机数运算实现混淆JS代码,达到降低代码可读性,以保护代码的目的,需要的朋友可以参考一下
    2007-12-12
  • 手把手教你自己写一个js表单验证框架的方法

    手把手教你自己写一个js表单验证框架的方法

    其实我自己也就能简单用用js而已,但是呢,相对很多初学者来说多懂了点Know How所以斗胆孟浪一下,将一些所得记录下来,以供更多的初学者能够知道一个东西的实现过程,省去在源码里摸索的过程。
    2010-09-09
  • JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    研究了一年多的js,也差不多写一个自己的js库了。 我写这个不算框架,只是一个小型的js工具库,所以我用的名字是Library。
    2009-10-10
  • JavaScript 继承使用分析

    JavaScript 继承使用分析

    继承,通俗地说,之前你写过一些类,这些类中有一些是而你现在要写的类的功能的子集或者基本相同,那么你不用完全重新写一个新的类,你可以把之前写的类拿过来使用.这样的一种代码重用过程就叫做继承
    2011-05-05
  • Javascript 面向对象(二)封装代码

    Javascript 面向对象(二)封装代码

    Javascript 面向对象(二)封装代码,需要的朋友可以参考下
    2012-05-05
  • js创建对象的几种常用方式小结(推荐)

    js创建对象的几种常用方式小结(推荐)

    最近在看javascript高级程序设计,其中对对象的创建做了具体的阐述,综合起来,总结了下(je知识库javascript专栏由这方面的教程,有兴趣的可以去知识库看看)
    2010-10-10
  • javascript 面向对象全新理练之继承与多态

    javascript 面向对象全新理练之继承与多态

    前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员、公有实例成员、私有静态成员、公有静态成员和静态类的封装。这次我们来讨论一下面向对象程序设计中的另外两个要素:继承与多态。
    2009-12-12
  • JavaScript对象模型-执行模型

    JavaScript对象模型-执行模型

    数据类型,基本数据类型基本数据类型是JS语言最底层的实现。
    2008-04-04
  • js 面向对象的技术创建高级 Web 应用程序

    js 面向对象的技术创建高级 Web 应用程序

    在 C++ 或 C# 中,在谈论对象时,是指类或结构的实例。对象有不同的属性和方法,具体取决于将它们实例化的模板(即类)。
    2010-02-02
  • JavaScript中的面向对象介绍

    JavaScript中的面向对象介绍

    在JavaScript,可以说everything is object,那么什么是对象?对象就是包含一组变量和函数的集合。在其它面向对象语言中对象是由类的实例化而来,JavaScript是基于原型的面向对象语言,没有类的概念,对象派生自现有对象的副本
    2012-06-06

最新评论