标签:
一、call和apply区别
传递参数的方式。用法上不同,主要是参数不完全同
(1)、B.Function.call(A,arg,arg)
这个例子是讲A对象“调用”B对象的Function(某个具体的方法)。
注意call方法中的参数arg:
a) arg的个数为零或多个;
b) arg可以是任何类型,包括Array。
call在这里译为“调用”,在JS中可以理解为“A对象调用B对象的某个方法”;
(2)、B.Function.apply(A,args)
这个例子是讲A对象“应用”B对象的Function(某个具体的方法)。
注意apply方法中的参数args:
a) args是Array对象的一个实例,也就是一个数组;
b) args的个数为零(就是说不起作用)或1个;。
apply在这里译为“应用”,即“A对象应用B对象的某个方法”。
二、call和apply实例
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
来源于:http://blog.csdn.net/whaxrl/article/details/25116809
标签:
原文地址:http://www.cnblogs.com/annabook/p/4654048.html