JavaScript函数的4种调用方法实例分析


Posted in Javascript onMarch 05, 2019

本文实例讲述了JavaScript函数的4种调用方法。分享给大家供大家参考,具体如下:

JavaScript 函数有 4 种调用方式:

  • 1. 作为一个函数调用
  • 2. 函数作为方法调用
  • 3. 使用构造函数调用函数
  • 4. 作为函数方法调用函数

分述如下:

每种方式的不同方式在于 this 的初始化。

作为一个函数调用

function myFunction(a, b) {
  return a * b;
}
myFunction(10, 2); // myFunction(10, 2) 返回 20

以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。

在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。

在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。

myFunction()window.myFunction() 是一样的:

function myFunction(a, b) {
  return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) 返回 20

当函数没有被自身的对象调用时, this 的值就会变成全局对象。

在 web 浏览器中全局对象是浏览器窗口(window 对象)。

该实例返回 this 的值是 window 对象:

function myFunction() {
  return this;
}
myFunction(); // 返回 window 对象

函数作为全局对象调用,会使 this 的值成为全局对象。
使用 window 对象作为一个变量容易造成程序崩溃。

函数作为方法调用

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
myObject.fullName(); // 返回 "John Doe"

fullName 方法是一个函数。函数属于对象。 myObject 是函数的所有者。

this对象,拥有 JavaScript 代码。实例中 this 的值为 myObject 对象。

测试以下!修改 fullName 方法并返回 this 值:

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this;
  }
}
myObject.fullName(); // 返回 [object Object] (所有者对象)

函数作为对象方法调用,会使得 this 的值成为对象本身。

使用构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数。

这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:

// 构造函数:
function myFunction(arg1, arg2) {
  this.firstName = arg1;
  this.lastName = arg2;
}
// This  creates a new object
var x = new myFunction("John","Doe");
x.firstName; // 返回 "John"

构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。

构造函数中 this 关键字没有任何的值。

this 的值在函数调用时实例化对象(new object)时创建。

作为函数方法调用函数

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。

call()apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

function myFunction(a, b) {
  return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // 返回 20
function myFunction(a, b) {
  return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // 返回 20

两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。

在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null undefined, 它将使用全局对象替代。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
JS模仿手机端九宫格登录功能实现代码
Apr 28 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 Javascript
Vue.js基础知识小结
Jan 13 Javascript
微信小程序实现写入读取缓存详解
Aug 30 Javascript
解决layui表格内文本超出隐藏的问题
Sep 12 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
微信小程序保存多张图片的实现方法
Mar 05 #Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 #Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 #Javascript
es6数据变更同步到视图层的方法
Mar 04 #Javascript
使用webpack构建应用的方法步骤
Mar 04 #Javascript
详解element-ui中form验证杂记
Mar 04 #Javascript
JS使用数组实现的队列功能示例
Mar 04 #Javascript
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
往光标所在位置插入值的js代码
2013/09/22 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
python 异步async库的使用说明
2020/05/04 Python
质检的岗位职责
2013/11/17 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
对标管理实施方案
2014/03/12 职场文书
教师年度考核评语
2014/04/28 职场文书
授权委托书(完整版)
2014/09/10 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
中学生逃课检讨书
2015/02/17 职场文书
道歉短信大全
2015/05/12 职场文书
消防宣传语大全
2015/07/13 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
深入理解python协程
2021/06/15 Python
分享python函数常见关键字
2022/04/26 Python