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里使用Dom操作Xml
Sep 20 Javascript
JavaScript 应用类库代码
Jun 02 Javascript
学习ExtJS border布局
Oct 08 Javascript
JS实现点击按钮自动增加一个单元格的方法
Mar 09 Javascript
jquery中键盘事件小结
Feb 24 Javascript
jQuery中的通配符选择器使用总结
May 30 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 Javascript
深入浅析React中diff算法
May 19 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教程之phpize使用方法
2014/02/12 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
php微信支付之APP支付方法
2015/03/04 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python中的zip函数使用示例
2015/01/29 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
大学毕业感言一句话
2014/02/06 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
个人授权委托书
2014/04/03 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
销售合作意向书范本
2015/05/08 职场文书
百万英镑观后感
2015/06/09 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
Python与C++中梯度方向直方图的实现
2022/03/17 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android