javascript函数的四种调用模式


Posted in Javascript onJanuary 08, 2017

1、介绍

先介绍一下函数的调用模式有哪四种:

  •  函数调用模式,
  •  方法调用模式,
  •  构造函数调用模式,
  •  上下文调用模式;

在这里对于函数的调用模式,主要介绍每种调用模式的this的指向和返回值。

2、代码分析

①、函数调用模式

下面的调用模式就是大家最熟悉的函数调用模式,而函数调用模式的this指向和返回值是什么呢?

function fn1 () {
 console.log(this); 
};
fn1(); // 在调用函数fn1时,输出的this的结果是Window

在上述代码中,fn1也就是函数调用模式中的this是指向Window的,而返回值是由return决定。

可以得出以下结论(函数调用模式中):

  a, this是指向Window的 

  b, 返回值是由return语句决定的,如果没有return则表示没有返回值

②、方法调用模式

var name = "james";
var obj = {
  name : "wade",
 fn1 : function () {
  console.log(this.name);
 }  
};
obj.fn1(); // 在调用obj中的fn1方法函数时,输出的是wade

通过上面的代码结果分析,会得到以下结论(方法调用模式中):

  a, this 是指向调用该方法的对象

  b, 返回值还是由return语句决定,如果没有return表示没有返回值

③、构造函数调用模式

function Fn () {
 this.name = "james",
 this.age = 32,
 console.log(this)   
};
var fn1 = new Fn();// 在调用这段代码的时候,输出的是Fn {name: "james", age: 32}

通过上面的代码结果分析,会得到以下结论(构造函数调用模式中):

  a, this是指向构造函数的实例

  b, 如果没有添加返回值的话,默认的返回值是this

但是如果手动添加返回值之后呢

function Fn1 () {
 this.name = "james";
 return "wade" 
};
var fn1 = new Fn1();
console.log(fn1.name); // 这段代码输出的是 james;
function Fn2 () {
 this.name = "james";
 return [1,2,3]; 
};
var fn2 = new Fn2();
console.log(fn2.name); // 而这段代码输出的是undefined

而通过上面的代码结果分析,优化上面的结论:

  a, this是指向构造函数的实例

  b, 如果没有添加返回值的话,默认的返回值是this

  c, 如果有返回值,且返回值是简单数据类型(Number,String,Boolean··)的话,最后仍回返回this

  d, 如果有返回值,且返回值是复杂数据类型(对象)的话,最终返回该对象,所以上面的fn2是指向数组,所以fn2.name为undefined

④、上下文调用模式

function f1(){
 console.log(this);
}
f1.call(null); // Window
f1.call(undefined); // Window
f1.call(123); // Number的实例
f1.call("abc"); // String的实例
f1.call(true); // Boolean的实例
f1.call([1,2,3]); // Array的实例

通过上面的代码结果分析,得出以下结论(上下文调用模式中):

  a, 传递的参数不同,this的指向不同,this会指向传入参数的数据类型

  b, 返回值是由return决定,如果没有return表示没有返回值。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
JavaScript监听和禁用浏览器回车事件实例
Jan 31 Javascript
javascript实现的网站访问量统计代码
Dec 20 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
jQuery Mobile框架中的表单组件基础使用教程
May 17 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
vue cli 3.0 使用全过程解析
Jun 14 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
javascript设计模式之装饰者模式
Jan 30 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 Javascript
vue中是怎样监听数组变化的
Oct 24 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 #Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 #Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 #Javascript
jQuery+ajax的资源回收处理机制分析
Jan 07 #Javascript
JS实现iframe自适应高度的方法示例
Jan 07 #Javascript
JS小数转换为整数的方法分析
Jan 07 #Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 #Javascript
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php实现文件编码批量转换
2014/03/10 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
python实现电子产品商店
2019/02/26 Python
基于python的Paxos算法实现
2019/07/03 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
优秀教师事迹简介
2014/02/02 职场文书
社团招新策划书
2014/02/04 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
学生会竞聘书范文
2014/03/31 职场文书
见习报告的格式
2014/11/04 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书