javascript基础(函数属性arguments,方法:call,apply)(二十)
2017-02-08 15:47
609 查看
1.函数属性arguments,方法:call,apply:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 除了this,在调用函数时,浏览器还传递了另一个隐含的参数
* 还有一个参数叫做arguments
*
* arguments是一个类数组对象,在它里边保存着函数执行时的实参
* 函数的所有的实参都在arguments中保存,
* 通过arguments即使不定义形参也可以使用参数
*
* 属性:
* callee
* - arguments中有一个属性 callee,代表的是当前正在调用的函数对象
*
*/
function fun(a,b,c){
//Array.isArray() 可以用来检查一个对象是否是一个数组
//console.log(Array.isArray(arguments));
//获取实参的数量
//console.log(arguments.length);
//获取指定的实参
//实参会保存到arguments对象中指定的位置
//console.log(arguments[2]);
console.log(arguments.callee == fun);
}
//fun("hello",123,true);
function fun2(a , b){
console.log("a = "+a +" , b = "+b);
//console.log(this);
}
/*
* 函数对象的方法:
* call
* apply
* - 当调用函数对象的call和apply时都会导致函数立即执行,
* 就相当于调用了函数一样
* - 如果通过call和apply去调用一个函数,则call和apply中的第一个参数
* 将会是函数中的this
* - 区别:
* call的参数,需要一个一个列出来
* apply的参数,需要封装为一个数组传递
*
*
* this的不同的情况
* - 以函数形式调用,this是window
* - 以方法的形式调用,谁调用方法this就是谁
* - 以构造函数调用,this就是新创建的那个对象
* - 通过call和apply调用时,第一个参数会成为this
*/
var obj = {};
//fun2(123,456);
//在call方法中可以将实参作为call的第二个以后的参数,传递给函数
//fun2.call(obj,1,2);
//apply的参数不能一个一个的传,需要保存到一个数组中统一传递
//fun2.apply(obj , [1 , 2]);
var obj2 = {
name : "沙和尚",
sayName : function(){
console.log(this.name);
}
};
name = "window中的name";
obj2.sayName.call(window);
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 除了this,在调用函数时,浏览器还传递了另一个隐含的参数
* 还有一个参数叫做arguments
*
* arguments是一个类数组对象,在它里边保存着函数执行时的实参
* 函数的所有的实参都在arguments中保存,
* 通过arguments即使不定义形参也可以使用参数
*
* 属性:
* callee
* - arguments中有一个属性 callee,代表的是当前正在调用的函数对象
*
*/
function fun(a,b,c){
//Array.isArray() 可以用来检查一个对象是否是一个数组
//console.log(Array.isArray(arguments));
//获取实参的数量
//console.log(arguments.length);
//获取指定的实参
//实参会保存到arguments对象中指定的位置
//console.log(arguments[2]);
console.log(arguments.callee == fun);
}
//fun("hello",123,true);
function fun2(a , b){
console.log("a = "+a +" , b = "+b);
//console.log(this);
}
/*
* 函数对象的方法:
* call
* apply
* - 当调用函数对象的call和apply时都会导致函数立即执行,
* 就相当于调用了函数一样
* - 如果通过call和apply去调用一个函数,则call和apply中的第一个参数
* 将会是函数中的this
* - 区别:
* call的参数,需要一个一个列出来
* apply的参数,需要封装为一个数组传递
*
*
* this的不同的情况
* - 以函数形式调用,this是window
* - 以方法的形式调用,谁调用方法this就是谁
* - 以构造函数调用,this就是新创建的那个对象
* - 通过call和apply调用时,第一个参数会成为this
*/
var obj = {};
//fun2(123,456);
//在call方法中可以将实参作为call的第二个以后的参数,传递给函数
//fun2.call(obj,1,2);
//apply的参数不能一个一个的传,需要保存到一个数组中统一传递
//fun2.apply(obj , [1 , 2]);
var obj2 = {
name : "沙和尚",
sayName : function(){
console.log(this.name);
}
};
name = "window中的name";
obj2.sayName.call(window);
</script>
</head>
<body>
</body>
</html>
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- 只需四个步骤几行代码,即可快速实现直播弹幕功能
- 浅析 Node.js 的 vm 模块以及运行不信任代码
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- maven使用经验集
- JavaScript 基础、进阶以及 Ubuntu 系统中的 JavaScript 开发调试工具
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 设计模式---状态模式在web前端中的应用
- SUI踩坑记录
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)