浅谈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 相关文章推荐
utf8的编码算法 转载
Dec 27 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
不使用jquery实现js打字效果示例分享
Jan 19 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
JS日期格式化之javascript Date format
Oct 01 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 Javascript
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
微信小程序收藏功能的实现代码
Jun 12 Javascript
vue实现局部刷新的实现示例
Apr 16 Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 Javascript
Ant design vue中的联动选择取消操作
Oct 31 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 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
python with statement 进行文件操作指南
2014/08/22 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
python 正确保留多位小数的实例
2018/07/16 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python如何调用php文件中的函数详解
2020/12/29 Python
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
光声世纪笔试题目
2012/08/25 面试题
校长四风对照检查材料
2014/09/27 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
2022年显卡天梯图(6月更新)
2022/06/17 数码科技