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 相关文章推荐
XRegExp 0.2: Now With Named Capture
Nov 30 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
node.js中的events.emitter.listeners方法使用说明
Dec 10 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
require.js的用法详解
Oct 20 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
原生JS实现 MUI导航栏透明渐变效果
Nov 07 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
浅谈react useEffect闭包的坑
Jun 08 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 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
php unlink()函数使用教程
2018/07/12 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
react-router中的属性详解
2017/06/01 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
python创建和删除目录的方法
2015/04/29 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python理解递归的方法总结
2019/01/28 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python如何基于redis实现ip代理池
2020/01/17 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
Python实现疫情地图可视化
2021/02/05 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
房地产销售大学生自我评价分享
2013/11/11 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
电钳专业个人求职信
2014/01/04 职场文书
冬季施工防火方案
2014/05/17 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
专职安全员岗位职责
2015/04/11 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
深入探讨opencv图像矫正算法实战
2021/05/21 Python