浅谈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 相关文章推荐
Mootools 1.2教程(3) 数组使用简介
Sep 14 Javascript
动态调用CSS文件的JS代码
Jul 29 Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
Bootstrap 粘页脚效果
Mar 28 Javascript
关于ES6的六个小特性(二)
Feb 20 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
JavaScript设计模式之装饰者模式实例详解
Jan 17 Javascript
如何利用JS将手机号中间四位变成*号
Sep 29 Javascript
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
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消息队列用法实例分析
2016/02/12 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
如何编写jquery插件
2017/03/29 jQuery
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
决策树的python实现方法
2014/11/18 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
业务主管岗位职责
2013/11/20 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
学习演讲稿范文
2014/05/10 职场文书
体操比赛口号
2014/06/10 职场文书
法定代表人身份证明书
2014/09/10 职场文书
物业工程部岗位职责
2015/02/11 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
张思德观后感
2015/06/09 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle