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 相关文章推荐
Ext 表单布局实例代码
Apr 30 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
JavaScript实现点击文字切换登录窗口的方法
May 11 Javascript
jQuery.each使用详解
Jul 07 Javascript
JavaScript模拟鼠标右键菜单效果
Dec 08 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
jQuery实现简单的Ajax调用功能示例
Feb 15 jQuery
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
layui在form表单页面通过Validform加入简单验证的方法
Sep 06 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
Oct 01 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 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
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php实现paypal 授权登录
2015/05/28 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
python获取指定网页上所有超链接的方法
2015/04/04 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python requests使用socks5的例子
2019/07/25 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
keras 读取多标签图像数据方式
2020/06/12 Python
python 实现Harris角点检测算法
2020/12/11 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
性能服装:HYLETE
2018/08/14 全球购物
演讲稿开场白
2014/01/13 职场文书
《恐龙》教学反思
2014/04/27 职场文书
公司建议书怎么写
2014/05/15 职场文书
甘南现象心得体会
2014/09/11 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android