浅析JavaScript函数的调用模式


Posted in Javascript onAugust 10, 2016

我们说一个函数的调用模式是作为一个函数来调用,是要与其它三种调用模式做区分
函数其他的三种调用: 方法调用模式,构造器调用模式,apply/call调用模式。 

方法的调用模式: 

var obj={
 fun1: function(){
  //方法内容
  this; //指的是window
 }
}

obj.fun1() //方法的调用

构造器的调用: 

function Person(name, age, job){
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = function(){
  alert(this.name);
 };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

apply/call调用模式: 

function cat(){}
cat.prototype = {
 food: "fish",
 say: function(){
  alert("I love " + this.food);
 }
};

var blackCat = new cat; 
blackCat.say();

这里如果没有显性的return语句,这个新的对象则会被隐式的return,并成为这个构造器的值。 也就是说这里可以等价于: var blackCat = new cat();
但是如果我们有一个对象 

var whiteDog = {
 food: "bone"
};

我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:
 blackCat.say.call(whiteDog);
所以,可以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。 

用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array(arguments等等)。它不能应用Array下的push,pop等方法。我们可以通过:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
这样domNodes就可以应用Array下的所有方法了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
javascript截取字符串小结
Apr 28 Javascript
jquery右下角自动弹出可关闭的广告层
May 08 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
Sep 07 Javascript
微信小程序排坑指南详解
May 23 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
前端 javascript 实现文件下载的示例
Nov 24 Javascript
Vue监视数据的原理详解
Feb 24 Vue.js
JavaScript实现刷新不重记的倒计时
Aug 10 #Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 #Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 #Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 #Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 #Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 #Javascript
基于JavaScript实现树形下拉框
Aug 10 #Javascript
You might like
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
python选择排序算法的实现代码
2013/11/21 Python
Python中如何获取类属性的列表
2016/12/26 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
网络维护中文求职信
2014/01/03 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
财务总经理岗位职责
2014/02/16 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
四群教育工作总结
2015/08/10 职场文书