浅谈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 相关文章推荐
Array对象方法参考
Oct 03 Javascript
javascript编程起步(第六课)
Feb 27 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
node.js中的fs.readdir方法使用说明
Dec 17 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
小程序中this.setData的使用和注意事项
Aug 28 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 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实现邮件群发的源码
2013/06/18 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php绘制一个矩形的方法
2015/01/24 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
python标准算法实现数组全排列的方法
2015/03/17 Python
python读写二进制文件的方法
2015/05/09 Python
python创建进程fork用法
2015/06/04 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
司马光教学反思
2014/02/01 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
大型活动组织方案
2014/05/10 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
单位考核鉴定意见
2015/06/05 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL