浅谈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 学习笔记 防止发生命名冲突
Jul 30 Javascript
Javascript 中文字符串处理额外注意事项
Nov 15 Javascript
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
javascript内置对象操作详解
Feb 04 Javascript
jquery实现的伪分页效果代码
Oct 29 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
jquery实现自定义图片裁剪功能【推荐】
Mar 08 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 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实现找出链表中环的入口节点
2018/01/16 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
vue小白入门教程
2018/04/02 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python实现简单flappy bird
2018/12/24 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
早读课迟到检讨书
2014/09/25 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
素质教育培训心得体会
2016/01/19 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL