apply

要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。

function getAge(){
   var y = new Date().getFullYear();
   return y-this.birth;
}
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: getAge
};
xiaoming.age();//32
getAge.apply(xiaoming,[]);//32,this指向xiaoming,参数为空

另一个与apply类似的方法是call(),唯一的区别是:

apply()把参数打包成Array再传入;
call()把参数按顺序传入
Math.max.apply(null,[3,4,5]);//5
Math.max.call(null,3,4,5);//5

利用apply(),我们还可以动态改变函数的行为
现在假定我们想统计一下代码一共调用了多少次parseInt(),可以把所有的调用都找出来,然后手动加上count+=1,不过这样太傻了,最佳方案是用我们自己的函数替换掉磨人的parseInt();

var count =0;
var oldParseInt = parseInt;
window.parseInt = function () {
    count += 1;
    return oldParseInt.apply(null, arguments); // 调用原函数
};
parseInt('10');
console.log('count='+count);1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容