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 在线压缩和格式化收藏
Jan 16 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
jQuery选择器querySelector的使用指南
Jan 23 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 Javascript
详解Vue方法与事件
Mar 09 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
Oct 28 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
上课不认真检讨书
2014/09/17 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python
Docker下安装Oracle19c
2022/04/13 Servers