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 中的类和闭包
Jan 08 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
angularjs表格分页功能详解
Jan 21 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
Aug 12 Javascript
JS中FormData类实现文件上传
Mar 27 Javascript
vue style width a href动态拼接问题的解决
Aug 07 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 Javascript
吃通javascript正则表达式
Apr 21 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
jQuery实现tab栏切换效果
2020/12/22 jQuery
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python实现简单五子棋游戏
2019/06/18 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
软件测试面试题
2014/01/05 面试题
社区文化建设方案
2014/05/02 职场文书
会计毕业生自荐书
2014/06/12 职场文书
市场营销毕业求职信
2014/08/07 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
python解析json数据
2022/04/29 Python
教你如何用cmd快速登录服务器
2022/06/10 Servers