浅谈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 相关文章推荐
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
node.js中的querystring.parse方法使用说明
Dec 10 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
Sep 19 Javascript
AngularJS表单提交实例详解
Feb 18 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
Feb 26 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 Javascript
在Express中提供静态文件的实现方法
Oct 17 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
javascript Demo模态窗口
2009/12/06 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
python处理cookie详解
2014/02/07 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
创建索引时需要注意的事项
2013/05/13 面试题
法院执行局工作总结
2015/08/11 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
python井字棋游戏实现人机对战
2022/04/28 Python