浅析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 相关文章推荐
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
jquery-tips悬浮提示插件分享
Jul 31 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
Aug 14 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
jquery.Callbacks的实现详解
Nov 30 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
Jan 16 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 Javascript
浅谈layui里的上传控件问题
Sep 26 Javascript
微信小程序自定义底部弹出框功能
Nov 18 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
ThinkPHP之getField详解
2014/06/20 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python数据可视化之画图
2019/01/15 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
《美丽的公鸡》教学反思
2014/02/25 职场文书
客服部班长工作责任制
2014/02/25 职场文书
社区健康教育实施方案
2014/03/18 职场文书
小学家长评语大全
2014/04/16 职场文书
党建工作汇报材料
2014/12/24 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers