JavaScript 函数调用
创始人
2024-05-30 13:38:38
0

文章目录

  • JavaScript 函数调用
    • this 关键字
    • 调用 JavaScript 函数
    • 作为一个函数调用
    • 全局对象
    • 函数作为方法调用
    • 使用构造函数调用函数
    • 作为函数方法调用函数


JavaScript 函数调用

在这里插入图片描述

JavaScript 函数有 4 种调用方式。

每种方式的不同方式在于 this 的初始化。

this 关键字

一般而言,在Javascript中,this指向函数执行时的当前对象。

注意:this 是保留关键字,你不能修改 this 的值。

调用 JavaScript 函数

在之前的章节中我们已经学会了如何创建函数。

函数中的代码在函数被调用后执行。

作为一个函数调用

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

注意:这是调用 JavaScript 函数常用的方法, 但不是良好的编程习惯
全局变量,方法或函数容易造成命名冲突的bug。

全局对象

当函数没有被自身的对象调用时, this 的值就会变成全局对象。

在 web 浏览器中全局对象是浏览器窗口(window 对象)。

该实例返回 this 的值是 window 对象:

function myFunction() {return this;
}
myFunction(); // 返回 window 对象

注意:函数作为全局对象调用,会使 this 的值成为全局对象。
使用 window 对象作为一个变量容易造成程序崩溃。

函数作为方法调用

在 JavaScript 中你可以将函数定义为对象的方法。

以下实例创建了一个对象 (myObject), 对象有两个属性 (firstName 和 lastName), 及一个方法 (fullName):

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)下, 如果第一个参数的值是 nullundefined, 它将使用全局对象替代。

注意:通过 call() 或 apply() 方法你可以设置 this 的值, 且作为已存在对象的新方法调用。

相关内容

热门资讯

月球之谜 阅读答案 月球之谜 阅读答案五年级下1.文章介绍“月球之谜”是指关于月球的起源和地球与月球的距离2.A、B、C...
螃蟹背部有一张微笑的脸和嘴巴 螃蟹背部有一张微笑的脸和嘴巴是关公蟹吧?是这样的吗让卜?这种蟹叫关坦绝穗公蟹宏盯。
小白兔 春天 地里 写童话,么... 小白兔 春天 地里 写童话,么写?小白兔的种子 有一天,小绵羊和小白兔约好到地里去拔萝卜。“拔萝...
话配画 以家乡内容 话配画 以家乡内容话配画 以家乡内容  今天,我参加了三门县青少年活动中心组织的“家乡巨变”红色之旅...
钢琴 牧童短笛 怎么合啊,谢谢 钢琴 牧童短笛 怎么合啊,谢谢不懂什么意思
刚刚看完《司藤》不得不感叹云南... 刚刚看完《司藤》不得不感叹云南真美啊,《司藤》火的原因你知道吗?这部电视剧火是因为演员的演技好,而且...
守护甜心的两个主角是谁 守护甜心的两个主角是谁女主角:日奈森亚梦男主角:边里唯世虽然日奈森亚梦和边里唯世是主角 但是人气在...
姓严女孩名,五行缺水和火,中间... 姓严女孩名,五行缺水和火,中间字要带宋字,如:严宋…严宋晴(晴是日字旁,是人都知太阳其实就是个火球)
怪物大师四不像的身世 怪物大师四不像的身世怪物大师四不像的身世可能是远古巨兽,比炎龙,海因里希(水元素始祖怪),盖亚(土元...
红颜蓝颜的区别 红颜蓝颜的区别性别不同,蓝颜指男,红颜指女。蓝颜一般是指女人对男性知己的称呼。即是一种既非亲情、也非...
考研政治怎么复习? 考研政治怎么复习?报个班挺好的,政治知识点太多了,培训班的哪些人可以抓住重点,考前还可以压个题,能节...
跪求小说 跪求小说fejghrejghrghihy[ojgukmguionfjnoi5nybunioewghg...
求一本小说,女主叫男主大叔,男... 求一本小说,女主叫男主大叔,男主叫女主小东西,后来女主差点流产,纯情丫头火辣辣?
韩露 江口 韩露 江口你还是买单行本比较好,是《瞳深水》还是《瞳之住人》再或是《零号病院》来着……不记得了,你都...
求文字淡雅的古代言情小说,快! 求文字淡雅的古代言情小说,快!非我倾城,非池中物,都不错我推荐最近看的《云中歌》 有历史背景的 ...
火影阿凯八门门数名称 火影阿凯八门门数名称如题,一定要有门数和名称开门、休门、生门、伤门、杜门、景门、惊门、死门
波斯猫是什么品种的猫 波斯猫是什么品种的猫....波斯猫就是波斯猫啊。
梦见女人裤头理的红色月经 梦见女人裤头理的红色月经梦见女人裤头理的红色月经你年纪多大?没事的梦而已
东方PROJECT人物全释.【... 东方PROJECT人物全释.【精准】RT.- =这个....还是去wiki或者东镇去看看比较好......
前面时间有一本小说是讲一个人穿... 前面时间有一本小说是讲一个人穿越到异界当了个魔法师 还有给人家讲西游记故事的是叫什么名字了谢谢了,异...