浅析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 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
JavaScript 动态添加表格行 使用模板、标记
Oct 24 Javascript
基于jquery的跨域调用文件
Nov 19 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
jquery easyui滚动条部分设置介绍
Sep 12 Javascript
jQuery内置的AJAX功能和JSON的使用实例
Jul 27 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
js实现简单的可切换选项卡效果
Apr 10 Javascript
JavaScript脚本库编写的方法
Dec 09 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
jquery.tableSort.js表格排序插件使用方法详解
Aug 12 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
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 JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
原生JavaScript实现换肤
2021/02/19 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
深入解析Python中的线程同步方法
2016/06/14 Python
python读取二进制mnist实例详解
2017/05/31 Python
python正则表达式面试题解答
2020/04/28 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
django从后台返回html代码的实例
2020/03/11 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
骨干教师培训感言
2014/01/16 职场文书
北京大学自荐信范文
2014/01/28 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
《燕子》教学反思
2014/02/18 职场文书
驾驶员培训方案
2014/05/01 职场文书
小班下学期评语
2014/05/04 职场文书
民主评议党员个人总结
2015/02/13 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server