知识小结
-
call()方法与applly()方法的区别和用法
用法:这两个方法都可以用来调用一个对象的方法,以另一个对象替换当前的对象。也就是一个对象从另一个对象中继承本身没有的方法。当一个对象没有某一个方法,而另一个有,就可以借助call或apply来继承这个方法。
区别:这两个方法的第一个参数都是要继承方法的对象本身。call()剩余的参数都是传递给要调用的函数的值,而apply()只有两个参数,第二个是数组,这个数组就是要调用的函数的参数。
-
回调函数
回调函数是一个被作为参数传递给另一个函数的函数,回调函数在这个函数中被调用。回调函数不会马上执行,它会在包含它的函数中的某个特定时间点被调用(回调)。举个例子,在jQuery中的点击方法,$("....").click(function(){....})这是回调函数典型的用法。
使用命名或匿名函数作为回调,前面的例子就是一个匿名函数作为回调函数。而命名的函数作为回调函数时,是将回调函数的函数名作为参数传递给了另一个函数。
function aaa(i){ var j = 10; alert(i*j); } function bbb(m,callback){ callback(m); } bbb(2,aaa);
结果弹出20;当调用bbb函数时,将aaa作为参数传递给了bbb,同时,m作为形参传递给了aaa,所以结果是20。
当要作为回调函数的方法是一个对象内的方法时,要用对象 . 方法的形式来传递回调函数。例如:
var obj = { name : "mc", aaa : function(i){ alert(this.name + i); } } obj.aaa("lin24");//弹出mclin24(此时的this指向obj) function bbb(m,callback){ callback(m); } bbb("lin24",obj.aaa);
(弹出lin24)但是,此时回调函数中的this并没有指向obj对象,反而是指向了window。这个时候可以用call或者apply方法保存原来方法this的指向。
var obj = { name : "mc", aaa : function(i){ alert(this.name + i); } } function bbb(m,callback,callbackobj){//这里的callbackobj是当前回调函数的this的指向对象。 callback.call(callbackobj,m); } bbb("lin24",obj.aaa,obj);
//弹mclin24,
网友评论