前端Call和apply指向函数与arguement
- 简介
- 一、call和apply和arguement的作用?
- 二、使用步骤
- 1.引入函数
- 2.读入数据
- 3.arguement函数方法
- 总结
简介
call和apply这两个方法都是函数对象的方法,需要通过函数对象交换调用
arguements是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
提示:以下是本篇文章正文内容,下面案例可供参考
一、call和apply和arguement的作用?
示例:这两个方法都是函数对象的方法,需要通过函数对象交换调用
一.this的情况
1.this在函数调用时,this指向window;
2.this在方法调用时,this指向方法的对象
3.以构造函数调用时,this指向新创建的对象
4.使用call和apply调用时,this是指定的对象
二.当函数调用apply()和call()都会调用函数执行
1.在调用call和apply可以将一个对象指定为第一个参数
2.此时这个对象会成为函数指定的this
3.call可以将实参在对象之后依次传递
4.apply方法将实参封装到数组里统一传递
三.封装实参的对象 argument
arguement是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
//–在调用函数时,我们所传递的实参都会通过arguement来保存
//–arguement.length可以用来获取实参的长度
//我们即使不定义形参,也可以通过arguement使用实参
二、使用步骤
1.引入函数
function fun()
{
alert("我是函数");
}
var obj={
}
2.读入数据
代码如下(示例):
function fun()
{
alert("我是函数");
}
var obj={
}
fun,call(obj,1,2);
fun.apply(obj,[1,2]);
3.arguement函数方法
代码如下(示例):
<script>
function sum(){// 形参
console.log(arguments);
var sum = 0;
for(var i = 0; i < arguments.length; i++){
sum += arguments[i];
}
console.log(sum);
}
// 实际参数 --- 实参
sum(10, 20, 3, 4, 5);
function fn(a, b, c, d){
console.log(arguments.length);//实参的个数
console.log(fn.length);//形参的长度
if(fn.length > arguments.length){
console.log('形参多了');
}else if ( fn.length < arguments.length){
console.log('实参多了');
}else{
console.log('刚好');
}
}
fn(1,2,3,4,5);
function demo(a, b){
a = 3;
//当形参和实参个数相同时 arguments 中的参数和 形参是一一映射的关系 在数量一直的情况下,变化会保持一致
arguments[0] = 1;
console.log(a);//1
}
demo(10, 20);
function demo1(z, y, x){
// x=10 y=10 z=2
y = 10;
arguments[0] = 2;
x = 4;
arguments[2] = 10;
console.log(z,y,x);
console.log(arguments[0], arguments[1], arguments[2]);
}
demo1(1, 2, 3);
//特殊情况:实参比形参少,在函数的内部,多余的形参则不会和实参对象(arguments)中对应位置的值保持变化一致
function demo2(a, b){
arguments[0] = 'abc';
arguments[1] = 2;
b = 3;
console.log(a, b);//'abc' 3
console.log(arguments[0], arguments[1]);//'abc' 2
var newArr = Array.from(arguments);
console.log(arguments);
console.log(newArr);
}
demo2(1);
</script>
总结
1.call和appl用于调用函数时,改变函数指向的对象
2.call可以将实参在对象之后依次传递
3.apply方法将实参封装到数组里统一传递
4.arguement是一个伪数组,可以获取实参的长度 5.当形参和实参个数相同时 arguments 中的参数和 形参是一一映射的关系 在数量一直的情况下,变化会保持一致