浅谈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 new后的constructor属性
Aug 05 Javascript
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
js中function()使用方法
Dec 24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
JavaScript 学习笔记之操作符(续)
Jan 14 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
Dec 18 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
Vue组件实例间的直接访问实现代码
Aug 20 Javascript
angular-tree-component的使用详解
Jul 30 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
通过实例解析JavaScript for in及for of区别
Jun 15 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
超级简单的发送邮件程序
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python最长公共子串算法实例
2015/03/07 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
python解析yaml文件过程详解
2019/08/30 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
保护环境标语
2014/06/09 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
庆七一宣传标语
2014/10/08 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python