<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//call() apply() arguments
// function fun(a,b) {
// // alert(this.name);
// console.log(a);
// console.log(b);
// }
// var obj1 = {
// name:"obj1",
// sayName:function(){
// alert(this.name);
// }
// };
// var obj2 = {name:"obj2"};
// obj1.sayName.apply(obj2);
// fun.call(obj1,2,3);
// fun.apply(obj1,[3,5])
//[object Window]
// fun();
// fun.apply();
// fun.call();
// fun.apply(obj1);
// fun.call(obj2);
//call()和apply()
// - 这两个方法都是函数对象的方法,需要通过函数对象来调用
// - 当对函数调用call()和apply()都会调用函数执行
// - 在调用call()和apply()可以将一个对象指定为第一个参数
// 此时这个对象将会成为函数执行时的this
// - call()方法可以将实参在对象之后依次传递
// - apply()方法需要将实参封装到数组中统一传递
// this总结
// 1 以函数形式调用时,this是window
// 2 以方法形式调用时,this是调用方法的对象
// 3 以构造函数的形式调用时,this是创建的那个对象
// 4 使用call和apply调用时,this是指定的那个对象
// 在调用函数时,浏览器每次都会传递2个隐含的参数
// 1 函数的上下文对象this
// 2 封装实参的对象arguments
// -- argumens是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
// -- 在调用函数时,我们所传递的参数都会在argumes中保存
// -- arguments.length可以用来获取实参的长度
// -- 即使不定义形参 也可以通过arguments来使用实参
// 只不过比较麻烦
// arguments[0] 第一个实参
// arguments[1] 第二个实参
// -- arguments里面有一个属性脚callee
// 这个属性对应一个函数对象,就是当前正在指向的函数对象
function fun() {
//false
// console.log(arguments instanceof Array);
// false
// console.log(Array.isArray(arguments));
// console.log(arguments.length);
// 123
console.log(arguments[0]);
//456
console.log(arguments[1]);
//true
console.log(arguments.callee == fun);
}
fun(123,456);
</script>
</body>
</html>
call() apply() arguments
最新推荐文章于 2021-04-09 13:33:23 发布