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 相关文章推荐
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
Vue.directive使用注意(小结)
Aug 31 Javascript
JavaScript使用localStorage存储数据
Sep 25 Javascript
vue props 一次传多个值实例
Jul 22 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
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
nginx配置React静态页面的方法教程
2017/11/03 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python读写配置文件的方法
2015/06/03 Python
Python AES加密模块用法分析
2017/05/22 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
python实现图片中文字分割效果
2019/07/22 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
中职招生先进个人材料
2014/08/31 职场文书
单位租房协议范本
2014/12/03 职场文书
详解python网络进程
2021/06/15 Python
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis