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 相关文章推荐
基于JQUERY的两个ListBox子项互相调整的实现代码
May 07 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
Jun 26 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
整理Javascript事件响应学习笔记
Dec 02 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 Javascript
JS实现的简单表单验证功能完整实例
Oct 14 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
webpack多入口多出口的实现方法
Aug 17 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
Dec 10 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应用JSON技巧讲解
2013/02/03 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
重新认识php array_merge函数
2014/08/31 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
Js动态创建div
2008/09/25 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
require.js的用法详解
2015/10/20 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
跟单文员的岗位职责
2013/11/14 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
合作经营协议书范本
2014/04/17 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
2014年党支部承诺书
2014/05/30 职场文书
国企干部对照检查材料
2014/08/22 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
分享7个 Python 实战项目练习
2022/03/03 Python