2015-07-12 15:02:21
一、方法的定义 call方法: 语法:call(thisObj,Object) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法: 语法:apply(thisObj,[argArray]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
相同点:两个方法产生的作用是完全一样的
不同点:方法传递的参数不同
其实说明白一点,其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
function Person(name,age) { this.name=name; this.age=age; this.money = 500; }
function myFun(money) { alert(this.money); }
var money = 100; myFun(money); //return 100; //window.myFun(money); save to myFun(money); //这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)
myFun.apply(window,[]); //save to window.myFun.apply(window,[]); //return 100; //同上
myFun.apply(new Person('zhangsan',23),[]); //return 500, 空数组作为参数,仅符合语法要求 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500
myFun.call(new Person('zhangsan',23),money,300,'mycardId'); //return 500, 后面money,300和mycardId是参数列表作为参数,一一列出 //这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500