浅谈javascript 函数属性和方法


Posted in Javascript onJanuary 21, 2015

        每个函数都包含两个属性:length 和 prototype
        length:当前函数希望接受的命名参数的个数
        prototype:是保存他们所有实力方法的真正所在

        function sayName(name) {

            alert(name);

        }

        function sum(num1, num2) {

            return num1 + num2;

        }

        function sayHi() {

            alert("hi");

        }

        alert(sayName.length);//1 参数个数一个

        alert(sum.length);//2 参数个数2个

        alert(sayHi.length);//0 没有参数

        每个函数都包含两个非继承而来的方法:apply() 和 call()
        这两个方法都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
        首先apply()接受两个参数:一个是函数运行的作用域,另一个参数数组(可以是数组实例也可以是arguments对象)

 

 function sum(num1, num2) {

            return num1 + num2;

        }

        function callSum1(num1, num2) {

            return sum.apply(this, arguments);//传入arguments对象

        }

        function callSum2(num1, num2) {

            return sum.apply(this, [num1, num2]);

        }

        alert(callSum1(10, 10));//20

        alert(callSum2(10, 20));//30

        其次,call方法第一个参数没有变化,变化的是其余的参数都是传递参数,传递给函数的参数需要逐个列举出来

 

 function sum(num1, num2) {

            return num1 + num2;

        }

        function callSum(num1, num2) {

            return sum.call(this, num1, num2);

        }

        alert(callSum(10, 200));

        至于使用哪个方法更方便,完全取决于你的意愿。如果没有参数,用哪个都一样。
        但是,apply和call方法的出现绝对不是只是为了怎样去船体参数。
        它们真正的用武之地在于扩充函数赖以运行的作用域。

        window.color = "red";

        var o = {color: "blue"};

        function sayColor() {

            alert(this.color);

        }

        sayColor();//red

        sayColor.call(this);//red

        sayColor.call(window);//red

        sayColor.call(o);//blue

        使用apply和call来扩充作用域的最大的好处就是不需要与方法有任何的耦合关系。

        ECMAScript5 还定义了一个方法:bind()。这个方法会创建一个函数的实例,其this值会被绑定到传给bind函数的值

 

 window.color = "red";

        var o = {color: "blue"};

        function sayColor() {

            alert(this.color);

        }

        var bindFun = sayColor.bind(o);

        bindFun();//blue

以上就是本文的全部内容,希望小伙伴们能够喜欢。

Javascript 相关文章推荐
js字符串的各种格式的转换 ToString,Format
Aug 08 Javascript
关于跨站脚本攻击问题
Dec 22 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
canvas实现图像截取功能
Feb 06 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
Bootstrap警告框(Alert)插件使用方法
Mar 21 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
jQuery实现手势解锁密码特效
Aug 14 jQuery
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
JS常见错误(Error)及处理方案详解
Jul 02 Javascript
html的DOM中document对象images集合用法实例
Jan 21 #Javascript
浅谈javascript面向对象程序设计
Jan 21 #Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 #Javascript
封装好的一个万能检测表单的方法
Jan 21 #Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 #Javascript
JS简单计算器实例
Jan 20 #Javascript
jQuery元素的隐藏与显示实例
Jan 20 #Javascript
You might like
php 邮件发送问题解决
2014/03/22 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python多重继承新算法C3介绍
2014/09/28 Python
python简单实现基数排序算法
2015/05/16 Python
Python中的index()方法使用教程
2015/05/18 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python实现停车管理系统
2018/11/30 Python
django云端留言板实例详解
2019/07/22 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
绩效管理实施方案
2014/03/19 职场文书
社区清明节活动总结
2014/07/04 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
出生证明范本
2015/06/15 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技