- 相關(guān)推薦
讓你我減少對jQuery的依賴(lài)度
雖然現在慢慢減少了對jQuery的使用(項目上還是用,效率高點(diǎn)。平時(shí)基本不用了),希望從而減少對jQuery的依賴(lài)度。
但是這鏈式操作的方式實(shí)在吸引人(貌似現在不少新庫都采用了鏈式操作)。
新手無(wú)畏嘛,所以寫(xiě)了以下代碼。主要是避免以后又忘了,呵呵。
復制代碼 代碼如下:
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());
這只是進(jìn)行了鏈式操作。但是在firbug下可以看到j(luò )Query對象返回的是數組/類(lèi)數組。要實(shí)現這個(gè)卻不知道怎么辦好。。
總不能讓k.fn.prototype = new Array()吧。真要看jQuery源代碼還真是有點(diǎn)累。。
下面是針對網(wǎng)友的一些回復
其實(shí)鏈式操作很簡(jiǎn)單,就是每次返回操作對象本身,這樣就可以持續的調用該對象本身定義的所有方法了。
最簡(jiǎn)單的例子:
復制代碼 代碼如下:
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(); //每一步操作返回的都是實(shí)例化的o對象
它其實(shí)等同于這樣:
var a = new o();//如果沒(méi)有返回this,那么就不能在這里繼續調用了。因為返回的是undefined。
a.action1(); //這個(gè)時(shí)候就只能對a(實(shí)例化的o對象的引用)來(lái)操作。
a.action2();
如果你用過(guò)jQuery就應該發(fā)現了。jQuery并不需要你使用new來(lái)實(shí)例化一個(gè)對象,在使用的時(shí)候顯得更方便。
所以我們定義另一個(gè)對象來(lái)封裝上面提到的o對象:
var k = function() {
return new o();
}
這樣我們就可以這樣調用了:
k().action1().action2();
我為你推薦 一個(gè)叫 "函數化"的 構造JS的方法。
復制代碼 代碼如下:
//加粗表示強調
//這個(gè)方法是 《javascript語(yǔ)言精粹》第52頁(yè) 5.4函數化 上的。
var constructor = function (spec,my){
var that,其他的私有實(shí)例變量;
my = my || {};
把共享的變量和函數添加到my中
that = 一個(gè)新對象
添加給that 的特權方法
return that;
}
【讓你我減少對jQuery的依賴(lài)度】相關(guān)文章:
jquery提交按鈕的代碼03-30
jQuery程序設計03-30
如何理解jquery事件冒泡03-29
jQuery的DOM操作筆記03-29
jQuery中prev()方法用法03-30
基于jQuery的固定表格頭部的代碼03-30
jQuery 源碼分析和Ready函數03-29