1、方法定义
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
2、常用实例
function sayName() { alert(this.name); } var family = { name: "zhuchao", add: function(){sayName.call(this)} } family.add()
这样,就把sayName方法中的this对象指定成了family。
类似的,我们知道在js中,如果一个function没有指定this对象,那么this指代的就是window对象,而我们一般使用xxx(this)把当前对象传给function xxx。而现在我们也可以通过call方法指定this了。这也是我用的最多的情况。
诸如类似的还有jquery里的proxy方法
-
jQuery.proxy( function, context )
- function将要改变上下文语境的函数。
- context函数的上下文语境(`this`)会被设置成这个 object 对象。
-
jQuery.proxy( context, name )
- context函数的上下文语境会被设置成这个 object 对象。
- name将要改变上下文语境的函数名(这个函数必须是前一个参数 'context' 对象的属性)
这个方法通常在向一个元素上附加事件处理函数时,上下文语境实际是指向另一个对象的情况下使用。另外,jQuery 能够确保即使你绑定的函数是经过 jQuery.proxy() 处理过的函数,你依然可以用原先的函数来正确地取消绑定。
例子:
var obj = { name: "John", test: function() { alert( this.name ); $("#test").unbind("click", obj.test); } }; $("#test").click( jQuery.proxy( obj, "test" ) ); // This also works: // $("#test").click( jQuery.proxy( obj.test, obj ) );