javascript函数的调用模式有哪几种( 三 )

一、从语法当中了解这三个函数调用
(1)call();
语法:函数名.call(期望函数内部this指向谁, 参数1,参数2....); 【javascript函数的调用模式有哪几种】 
其中14行的普通调用的话用getSum()函数,this指向window; 第15行用call()的方式调用getSum()函数, 第1个参数传入”期望getSum函数中的this指向”,后面的参数依次传入getSum函数的参数即可。此时getSum函数一样被执行,不同的是getSum函数中的this就指向了obj对象,同时也把100,200分别赋值给形参a和b. 执行结果如下:
(2)apply();
语法:函数名.apply(this的新指向 , 数组或者伪数组);
注意apply()和call()的区别在于apply()只有2个参数,第一个参数是this的新指向,第二个参数是数组或者伪数组,调用的时候会把第二个参数(数组或伪数组)的元素依次的赋值给被调用函数的形参。
第24行普通方式调用getSum()函数,this指向window; 第25行用apply()的方式调用getSum()函数,此时getSum()函数中的this就指向了obj对象,同时把数组的元素100,200,300依次赋值给getSum()函数的形参a,b,c ; 执行结果如下:
(3)bind();
语法:函数名.bind( this的新指向 ,可以写参数也可以不写参数 );
需要注意的是函数用bind()的方式调用并不会执行该函数,而是会返回一个函数体一模一样但是修改了this指向后的函数。
第34行普通方式调用getSum()函数,this指向window; 第36行虽然用bind()的方式调用getSum()函数,但是此时并不会执行getSum()函数,而是会返回一个和getSum()函数的函数体一模一样但是this已经修改成obj对象的函数了,这个函数被fn变量接收。 执行结果如下:(只有一次函数体被执行,就是34行的调用)。
此时如果调用fn()函数,就相当于执行getSum()函数,但是getSum函数中的this已经被修改成了obj对象,调用代码和执行结果如下:
执行结果一样,如下:

二、上下文的调用模式需要注意的细节
1.大家都知道javascript中的函数(普通函数、构造函数)本质上是一个对象,是由Function()构造函数实例化出来的对象,而call、apply、bind这三个方法都是定义在Function.prototype原型中的,那么意味着javascript中的所有函数都可以点出这三个方法来。
推荐阅读
- C语言指数函数代码
- 单例模式static函数必须在头文件中实现么
- 特斯拉|特斯拉或将允许车主远程调用Autopilot摄像头
- webpack打包后的页面,在集成时,怎样提供js接口给父页面调用呢
- 函数|你要来试试吗?高中数学丨越做越起劲的100道高中数学函数类压轴题
- javascript 中this的四种调用模式
- 咋用c语言或java打点出函数图
- C语言多维数组声明调用和c为啥差别这么大
- 阿贵看车|专访|宋军:后千万时代,吉利汽车更强调用户体验
- macOS 用PHP调用curl抓取不到https的数据
