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 最简单易用的表单验证插件
Feb 27 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
Node.js 异步编程之 Callback介绍(一)
Mar 30 Javascript
Jquery实现顶部弹出框特效
Aug 08 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
vue.js 中使用(...)运算符报错的解决方法
Aug 09 Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 Javascript
浅谈关于vue中scss公用的解决方案
Dec 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
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python安装selenium包详细过程
2019/07/23 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
应用服务器有那些
2012/01/19 面试题
你对IPv6了解程度
2016/02/09 面试题
小学教师事迹材料
2014/01/13 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
cf收人广告词大全
2014/03/14 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
python使用glob检索文件的操作
2021/05/20 Python
如何利用React实现图片识别App
2022/02/18 Javascript
世界十大狙击步枪排行榜
2022/03/20 杂记