函数内部的this指的xiaoming这个变量,this.birth拿到xiaoming 的birth属性。
apply方法接受两个参数,一个为需要绑定的this变量,第二个参数是Array,表示函数本身的参数
function getAge(){ var y = new Dare().getFullYear(); return y - this.birth; } var xiaoming = { name:'小明', birth:1990, age:getAge }; xiaoming.age();//25 getAge.apply(xiaoming,[]); //25, this指向xiaoming,参数为空apply()与call()的区别就是apply()是把参数传入时放入列表导入, call是按顺序传入。
这个和python的装饰器的理念有点像,都是对于函数添加新的功能,在不改变函数的调用的情况下。
//查看函数本调用了多少次 var count = 0; var oldParseInt = pareInt;//保存原函数 window.parseInt = function(){ count + = 1; return oldParseInt.apply(null,arguments);//调用原函数 }; //测试: parseInt('10'); parseInt('15'); count;//2定义了一个函数,这个函数可以接受参数,并且可以接受另外一个函数作为参数。
function add(x,y,func){ return func(x) + func(y) }add(-5,6,Math.abs)时,func=Math.abs这个函数,x=-5,y=6。 然后进行计算func(-5) + func(6)返回结果。
当看到这两个函数的时候,我突然想起的py里好像也有这么两个函数,有种天下语言是一家的感觉。
function pow(){ return x * x; } var arr = [1,2,3,4,5,6,7] arr.map(pow);//[1,4,9,16,25,36,49]