[JavaScript学习]JavaScript深入理解函数 - 函数的属性 - Web前端
作者:98wpeu发布时间:2026-08-27分类:网页前端技术浏览:5
在上一篇文章中我们介绍了"JavaScript深入理解函数 - 函数的定义",本文将继续了解:JavaScript深入理解函数 - 函数的属性。每个函数都包括两个属性:length和prototype。length属性表示函数希望接收参数的个数,PRototype属性是函数的原型。

length属性
函数的length属性表示函数希望接收参数的个数。例如下面的代码:
function fn1(num1){
return num1 * 10;
}
function fn2(num1,num2){
return num1 + num2;
}
function fn3(){
return true;
}
console.info(fn1.length); // 1
console.info(fn2.length); // 2
console.info(fn3.length); // 0上面的代码中定义了3个函数,这3个函数的参数个数均不相同,通过控制台的打印可以看出各个函数所期望的参数个数是多少。
call()和apply()方法
每个函数都包括两个非继承来的方法:call()和APPly()。这两个方法的作用是在特定的作用域中调用函数,也就是说这两个方法可以通过函数名称来调用函数。
对于apply()方法,第一个参数是调用方法的上下文,第二个参数是一个参数数组,可以直接把arguments传入。
对于call()方法,第一个参数是上下文对象,第二个参数是不同的函数参数。
例如下面的例子展示了Apply()方法的应用。
function sum(num1,num2){
return num1+num2;
}
/* 通过Arguments来调用 */
function applySum1(num1,num2){
//使用sum函数来完成一次调用,调用的参数就是applySum1这个函数的参数(此时的this是window)
return sum.apply(this,arguments);
}
/* 通过参数数组来调用 */
function applySum2(num1,num2){
return sum.apply(this,[num1,num2]);
}
alert(applySum1(11,22)); //输出33
alert(applySum2(11,22)); //输出33上面的applySum1()和applySum2()两个函数是apply()方法的两种使用方式。
在applySum1()函数中,使用sum函数来完成调用,在apply()方法中,this是调用sum方法的上下文对象,即window对象,而调用的参数就是applySum1()方法的参数。
applySum2()方法和applySum1()方法唯一的区别是参数不同,applySum2()中apply()方法的参数是一个数组对象。
call()方法和apply()方法的功能完全相同,不同的是call()方法是通过参数列表来完成调用。例如下面的例子:
function callSum(num1,num2){
//call是通过参数列表来完成调用,其它和apply没有任何区别
return sum.call(this,num1,num2);
}
alert(callSum(11,22)); //输出33call()和apply()方法的真正强大的地方是可以扩充函数运行的作用域。例如下面的例子:
var color = "red";
function showColor(){
alert(this.color);
}
//创建了一个类
function Circle(color){
this.color = color;
this.showColor = showColor;
}
var c = new Circle("yellow");
//使用上下文(window)来调用showColor,结果是red
showColor.call(this);
//上下文对象是c,结果是yellow
showColor.call(c);在这个例子中,showColor.call(this);是在全局作用域中调用showColor方法,此时的this == window,所以它会打印出颜色为“red”,而showColor.call(c);则是使用对象c作为调用showColor方法的上下文,所以会打印出颜色“yellow”。
对于函数的prototype属性,我们将会在介绍JavaScript对象的时候详细讲解。
返回javascript教程主目录>>
相关推荐
- [JavaScript学习]JavaScript面向对象-基于原型链实现继承 - Web前端
- [JavaScript学习]正则表达式-常用正则表达式汇总(大全) - Web前端
- [JavaScript学习]正则表达式-什么是正则表达式? - Web前端
- [JavaScript学习]正则表达式-正则表达式的应用示例 - Web前端
- [JavaScript学习]JavaScript事件-DOM0级事件和DOM2级事件处理 - Web前端
- [JavaScript学习]JavaScript数据类型转换 - Web前端
- [JavaScript学习]正则表达式-正则表达式的元字符 - Web前端
- [JavaScript学习]JavaScript深入理解函数 - 函数的定义 - Web前端
- [JavaScript学习]JavaScript文档对象模型-DOM2级样式 - Web前端
- [JavaScript学习]JavaScript面向对象-简单对象的创建和JSON对象 - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


