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 相关文章推荐
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
7个Javascript地图脚本整理
Oct 20 Javascript
Javascript类库的顶层对象名用户体验分析
Oct 24 Javascript
使用JS进行目录上传(相当于批量上传)
Dec 05 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Oct 15 Javascript
javascript利用控件对windows的操作实现原理与应用
Dec 23 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
Aug 29 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
JavaScript学习笔记之惰性函数示例详解
Aug 27 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
python中Genarator函数用法分析
2015/04/08 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
班队活动设计方案
2014/01/30 职场文书
银行开业庆典方案
2014/02/06 职场文书
买卖协议书范本
2014/04/21 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
质量保证书格式模板
2015/02/27 职场文书
学校重阳节活动总结
2015/03/24 职场文书
中秋节主题班会
2015/08/14 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
详细了解MVC+proxy
2021/07/09 Java/Android