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 相关文章推荐
ECMAScript 基础知识
Jun 29 Javascript
js使用心得分享
Jan 13 Javascript
jQuery动态生成Bootstrap表格
Nov 01 Javascript
canvas实现绘制吃豆鱼效果
Jan 12 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
Bootstrap笔记—折叠实例代码
Mar 13 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 jQuery
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
微信小程序保存多张图片的实现方法
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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
php生成图片验证码
2015/06/09 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
MySQL最常见的操作语句小结
2015/05/07 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
应届生如何写自荐信
2014/01/05 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
学生喝酒检讨书
2014/02/06 职场文书
小学五年级学生评语
2014/04/22 职场文书
中职生自荐信范文
2014/06/15 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
教师党员自我评价2015
2015/03/04 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Python的三个重要函数详解
2022/01/18 Python