在javascript OOP中,咱們常常會這樣定義:
function cat(){ } cat.prototype={ food:"fish", say: function(){ alert("I love "+this.food); } } var blackCat = new cat; blackCat.say();
可是若是咱們有一個對象whiteDog = {food:"bone"},咱們不想對它從新定義say方法,那麼咱們能夠經過call或apply用blackCat的say方法:blackCat.say.call(whiteDog); 因此,能夠看出call和apply是爲了動態改變this而出現的,當一個object沒有某個方法,可是其餘的有,咱們能夠藉助call或apply用其它對象的方法來操做。 用的比較多的,經過document.getElementsByTagName選擇的dom 節點是一種相似array的array。它不能應用Array下的push,pop等方法。咱們能夠經過: var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*")); 這樣domNodes就能夠應用Array下的全部方法了。