浅析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 相关文章推荐
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
javascript实现des解密加密全过程
Apr 03 Javascript
2014 HTML5/CSS3热门动画特效TOP10
Dec 07 Javascript
jQuery实现类似标签风格的导航菜单效果代码
Aug 25 Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
vue项目从node8.x升级到12.x后的问题解决
Oct 25 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自动跳转中英文页面
2008/07/29 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
简述JS控制台的使用
2018/07/15 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
小程序实现多个选项卡切换
2020/06/19 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
Python深入学习之装饰器
2014/08/31 Python
python清理子进程机制剖析
2017/11/23 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
Python里面search()和match()的区别
2016/09/21 面试题
办公室驾驶员岗位职责
2013/11/15 职场文书
学生出入校管理制度
2014/01/16 职场文书
实习老师离校感言
2014/02/03 职场文书
加强作风建设心得体会
2014/10/22 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
通过Python把学姐照片做成拼图游戏
2022/02/15 Python