浅谈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 相关文章推荐
javascript 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
JQuery 操作select标签实现代码
May 14 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
Apr 11 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
jQuery中复合选择器简单用法示例
Mar 31 jQuery
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
JS实现可切换图片的幻灯切换效果示例
May 24 Javascript
生产制造追溯系统之再说条码打印
Jun 03 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设置session(过期、失效、有效期)
2015/11/12 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
js实现微信聊天效果
2020/08/09 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
详解Python的循环结构知识点
2019/05/20 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
一套.net面试题及答案
2016/11/02 面试题
食品厂厂长岗位职责
2014/01/30 职场文书
个人培训自我鉴定
2014/03/28 职场文书
春游踏青活动方案
2014/08/14 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript