這個很容易理解,例如:
$(this).setstyle('color', 'red').show();
鏈式呼叫其實是兩個部分:
1.操作物件(也就是被操作的dom元素,如上例的$(this))
2.操作方法(具體要做什麼事情,如上例的setstyle和show)
一般的$函式:
function$()
if(arguments.length==1)
elements.push(element);
}return
elements;
}
但是,如果把這個函式改造為乙個構造器,把那些元素作為陣列儲存在乙個例項屬性中,
並讓所有定義在建構函式的prototype屬性所指物件中的方法都返回用以呼叫方法的那個例項的引用(說了這麼多,就是在每個方法最後return this;),
這樣以來,它就具有了進行鏈式呼叫的能力。
改造後如下:
(function()
this
.elements.push(element);}}
_$.prototype =
return this;
//在每個方法的最後return this;
},setstyle:
function
(prop, val));
return
this; //
在每個方法的最後return this;
}, show:
function
());
return
this; //
在每個方法的最後return this;
}, addevent:
function
(type, fn)
else
if(window.attachevent)
};this.each(function
(el));
return
this; //
在每個方法的最後return this;
} }
window.$ = function
()})();
在最後return this,這就將呼叫方法的物件傳給呼叫鏈上的下乙個方法。
鏈式呼叫很適合於賦值器方法,但對於取值器方法,就不方便了,因為每個方法返回的都是this啊。
不過,變通的方法還是有的,那就是**函式。
//without callback
window.api = window.api || function
();
this.getname = function
();};
var o = new
api();
console.log(o.getname());
console.log(o.setname('haha').getname());
//with callback
window.api2 = window.api2 || function
();
this.getname = function
(callback);
};var o2 = new
api2();
o2.getname(console.log).setname('hehe').getname(console.log);
鏈式呼叫這種風格有助於簡化**的編寫工作,讓**更加簡潔、易讀,同時也避免多次重複使用乙個物件變數。
在使用**函式時候callback.call(this, name)在一般情況下是沒問題的,但是,這個例子偏偏用到了console.log,那麼就有問題了。原因是console的this是指向console而不是winodw。
這個問題也很好解決。如下:
//with callback
window.api2 = window.api2 || function
();
this.getname = function
(callback);
};var o2 = new
api2();
var log = function
(para);
o2.getname(log).setname('hehe').getname(log);
js實現方法的鏈式呼叫
假如這裡有三個方法 person.unmerried person.process person.married 在jquery中通常的寫法是 person.unmerried process married 而在js中要實現鏈式呼叫,只需在類中的每個方法中通過this關鍵字返回物件例項的引用。fu...
筆記 js繼承(含es6方法)
首先es5的繼承主要是通過prototype來實現,具體有三種方法 舉個栗子 比方說有兩個類a和b,問b怎麼樣繼承a 第一種 原型鏈繼承,也就是b.prototype new a 第二種 借用建構函式繼承 function b name,age 第三種 組合繼承 其實就是把前兩種繼承方式結合起來 e...
DAY7 方法的呼叫
1,方法的定義 訪問修飾符 返回值 方法名 引數列表 方式一 呼叫方法 物件名.method1 方式二 呼叫靜態方法 static 修飾的 string s abc char c method1 s s將賦值給 方法的形參 str 那麼方法執行的str有值 c 就是方法呼叫後的返回值1,方法的引數是...