雖然現在慢慢減少了對jQuery的使用(專案上還是用,效率高點。平時基本不用了),希望從而減少對jQuery的依賴度。
但是這鏈式操作的方式實在吸引人(貌似現在不少新庫都採用了鏈式操作)。
新手無畏嘛,所以寫了以下程式碼。主要是避免以後又忘了,呵呵。
複製程式碼 程式碼如下:
window.k = function() {
return new (arguments);
}
= otype = {
init:function() {
th = 0;
//var args = (arguments,0);
y(this,arguments[0]);
return this;
},
show:function() {
((this,0)("$"));
return this;
},
hide:function() {
(this);
return this;
}
}
otype = ;
(k("0",1,2,3,4,5)()());
這只是進行了鏈式操作。但是在firbug下可以看到jQuery物件返回的.是陣列/類陣列。要實現這個卻不知道怎麼辦好。。
總不能讓otype = new Array()吧。真要看jQuery原始碼還真是有點累。。
下面是針對網友的一些回覆
其實鏈式操作很簡單,就是每次返回操作物件本身,這樣就可以持續的呼叫該物件本身定義的所有方法了。
最簡單的例子:
複製程式碼 程式碼如下:
var o = function() {
/**
do something
*/
return this;
}
otype = {
action1: function() {
/**
do something
*/
return this;
},
action2: function() {
/**
do something
*/
return this;
}
}
你可以這樣呼叫:
new o() //
on1() //
on2(); //每一步操作返回的都是例項化的o物件
它其實等同於這樣:
var a = new o();//如果沒有返回this,那麼就不能在這裡繼續呼叫了。因為返回的是undefined。
on1(); //這個時候就只能對a(例項化的o物件的引用)來操作。
on2();
如果你用過jQuery就應該發現了。jQuery並不需要你使用new來例項化一個物件,在使用的時候顯得更方便。
所以我們定義另一個物件來封裝上面提到的o物件:
var k = function() {
return new o();
}
這樣我們就可以這樣呼叫了:
k()on1()on2();
我為你推薦 一個叫 "函式化"的 構造JS的方法。
複製程式碼 程式碼如下:
//加粗表示強調
//這個方法是 《javascript語言精粹》第52頁 5.4函式化 上的。
var constructor = function (spec,my){
var that,其他的私有例項變數;
my = my || {};
把共享的變數和函式新增到my中
that = 一個新物件
新增給that 的特權方法
return that;
}