JavaScript 函数中的call和apply方法
2019-07-13 15:32
537 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JUSTchanhy/article/details/95751162
而在
JavaScript 函数的call和apply方法
鉴于
JavaScript中函数的特殊性,我们可以把函数看作是特殊的对象,因此可以将
call和
apply看作是某个对象的方法,通过调用对象方法的形式简洁调用函数。
call和
apply的第一个参数是要调用函数的母对象,他就是调用函数的上下文,在所要调用函数的内部,我们可以使用
this关键字获取对传入的第一个对象的饮用。
function func1(){ this.func(); } var o ={}; o.func = function (){ console.log("Called by o."); } var b ={}; b.func = function (){ console.log("Called by b."); } func1.call(o); //Called by o. func1.apply(b); //Called by b.
在
ECMAScript 5的严格模式中,
call和
apply的第一个实参都会变成
this的值——
this就是第一个实参,哪怕传入的第一个参数是
null或者
undefined。
而在
ECMAScript 3和非严格模式中,传入的
null和
undefined都会被被全局对象所取代
function a(){ console.log(this); } a.call(null); //window.xx
对
call来说,第一个调用上下文实参之后的所有实参都是要传入所要调用的函数的参数的值。以对象
obj的方法调用
func函数,可以用下面的形式:
/* obj是对象, params是相关参数,可能有多个 */ func.call(obj, parmas);
apply和
call稍有不同,出了第一个参数相同之外, 其余的参数以数组的形式传入,例如:
var obj = {}; obj.func = (args) => { var sum=0; return args.reduce((x, y) => {return x+y},0); } buffer=[1,2,3,4]; func.apply(obj, buffer); //10 function func(){ this.func(buffer); }
注意,
apply的第二个参数出了可以传递数组还可以传入类数组对象,例如函数中的
arguments。
function trace(o,m){ var original = o[m]; o[m] = function(){ console.log(new Date(),"Entering: ",m); var ret = original.apply(this,arguments); //这里的this指向对象o //this==o :true console.log(new Date(),"Exiting: ",m); return ret; } }
相关文章推荐
- JavaScript之函数的apply和call方法。
- JavaScript 函数的apply()方法和call()方法
- javascript:函数的apply,call方法和length属性
- javascript 函数的方法call()和apply()
- javascript中函数call方法和apply方法
- javascript四种调用方式——方法调用模式、函数调用模式、构造器调用模式和Apply或Call调用模式
- Javascript学习---函数内置方法call/apply
- JavaScript的函数call和apply的区别、以及bind方法
- javascript 函数中的apply()和call()方法。
- javascript中函数的call和apply方法
- JavaScript中的函数:函数的apply、call方法和length属性
- JavaScript中的函数:函数的apply、call方法和length属性
- javascript 函数方法apply()和call()的共同点和区别
- javascript基础(函数属性arguments,方法:call,apply)(二十)
- JavaScript中函数对象的call()和apply()方法的总结
- JavaScript中的函数:函数的apply、call方法和length属性
- JavaScript中的函数:函数的apply、call方法和length属性
- javascript中函数的call,apply及bind方法
- 【JavaScript 学习--09】--理解Js 中的apply 和 call方法
- Apply和call方法-扩充函数赖以生存的作用域