前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript 学习-23.函数调用4种方式

JavaScript 学习-23.函数调用4种方式

作者头像
上海-悠悠
发布2022-05-25 11:41:52
4470
发布2022-05-25 11:41:52
举报
文章被收录于专栏:从零开始学自动化测试

前言

JavaScript 函数有 4 种调用方式, 每种方式的不同在于 this 的指向不一样。 在Javascript中 this 是保留关键字,一般而言,this指向函数执行时的当前对象。

函数调用

通常情况下我们可以用函数名称加圆括号()调用函数

代码语言:javascript
复制
function fun1(x, y,) {
    console.log(x+y);
    return x + y
}

fun1(5, 10);  // 15

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

代码语言:javascript
复制
var color = 'red';

function fun1() {
    console.log(this);
    return this.color
}

console.log(fun1());  // 'red'

函数作为方法调用

定义object对象的方法

代码语言:javascript
复制
var person = {
    user: "yoyo",
    age: 50,
    address: function () {
        // do something...
        console.log(this);
        return this.user
    }
};
console.log(person.address())  // "yoyo"

实例中 this 的值为 person  对象

构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数。 这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象

代码语言:javascript
复制
// 构造函数:
function myFunction(arg1, arg2) {
    this.user= arg1;
    this.age = arg2;
}

// new 
var x = new myFunction("yoyo", 20);
console.log(x.user)    // yoyo
console.log(x.age)    // 20

call() 和 apply() 方法调用函数

JavaScript 函数是对象, 函数有它的属性和方法。每个函数都包含两个属性:length和prototype prototype 下面有两个方法 apply(),call(),这两个方法都是函数非继承而来的方法,  是每一个函数都具有的方法。 这两个方法的用途都是在特定的作用域中调用函数(看this指向的作用域是谁),也就是说调用特定的对象下面调用函数

代码语言:javascript
复制
function func(x, y) {
    return x + y;
}

var res = func.call(this, 10, 20);
console.log(res);  // 30 
var res= func.apply(this, [10,20]);
console.log(res);  // 30

call()方法第一个同样是作用域,其余的参数是逐个传递给函数的,而不是传递一个数组过去。 apply()方法有两个参数,第一个是要执行这个方法的作用域,也就是传递一个对象过去,第二个参数是一个数组. 如果函数不需要传参,那么后面的参数是可以省略的。

代码语言:javascript
复制
var user = 'hello';
var person = {
    user: 'yoyo',
    age: 20
}
function myName(){
    return this.user;
}

console.log(myName());               //hello    this是window
console.log(myName.call(window));   //hello    this是window
console.log(myName.call(this));      //hello   this是window
console.log(myName.call(person));    //yoyo     this是person 
console.log(myName.call(null));      //hello    this是window

使用这apply()和call()这两个方法最大的好处是对象不需要与函数有耦合关系,也就是上面说的对象中可能不存在这个方法,但只要存在这个对象就行。

2022年第 11 期《python接口web自动化+测试开发》课程,6月5号开学!

2022年第 1 期《Python 测试平台开发》课程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 函数调用
  • 函数作为方法调用
  • 构造函数调用函数
  • call() 和 apply() 方法调用函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档