JS面向对象函数的四种调用模式

本文深入解析JavaScript中函数的四种调用模式:函数模式、方法模式、构造器模式和上下文模式,以及每种模式下this的指向规则。通过理解这些模式,开发者能更准确地控制函数的行为。

经验/问题描述

js ,无论是函数, 还是方法, 还是事件, 还是构造器...这些东西的本质都是函数,其中的区别只是所处的位置不同。根据函数内部this的指向不同,可以将函数的调用模式分成4种:函数模式、方法模式、构造器模式和上下文模式等四种不同的调用模式

  1. 解决方法

首先先来分析this指向问题:

1、任何函数都有属于自己的this

2、this的指向和函数的调用模式相关,意味着this的指向在函数声明的时候确定不了。然后分析this指向的思路:

1、this是属于哪个函数的

2、这个函数的调用模式是哪种

四种调用模式

1、函数模式

特征:简单的函数调用,函数名前面没有任何引导内容。

this 的含义: 在 函数中 this 表示全局对象, 在浏览器中this表示window。

注:任何自调用函数都是函数模式

2、方法模式

特征: 方法一定是依附于一个对象,将函数赋值给对象的一个属性,那么就成为了方法。

this的含义:这个依附的对象

注:arguments 这种伪数组, 或者 [] 数组这样的对象中, 这样调用函数也是方法调用, this 会只指向对象。

3、构造器模式(构造函数模式,构造方法模式)

特征:

(1)、使用 new 引导构造函数, 创建了一个实例对象

(2)、在创建对象的同时, 将this指向这个刚刚创建的对象

(3)、在构造函数中, 不需要 return , 会默认的 return this

分析:

由于构造函数只是给 this 添加成员, 而方法也可以完成这个操作,对与 this 来说, 构造函数和方法没有本质区别

关于return的补充:

在构造函数中,普通情况,可以理解为构造函数已经默认进行了return this,添加在后面的都不会执行

如果手动的添加 return ,就相当于 return this.

如果手动的添加 return 基本类型(字符串, 数字, 布尔), 无效, 还是 return this

如果手动的添加 return null 或 return undefined, 无效, 还是 return this

特殊情况, return对象, 最终返回对象

手动添加return对象类型,那么原来创建的this会被丢掉,返回 return 后面的对象

4、上下文调用模式

特征:上下文调用模式也叫方法借用模式,分为apply与call,上下文 就是环境, 就是自定义设置this的含义

语法:

函数名.apply(对象,[参数]);

函数名.call(对象,参数);

描述:

函数名就是表示的函数本身, 使用函数进行调用的时候默认 this 是全局变量

函数名也可以是方法提供, 使用方法调用的时候, this 是指当前对象.

使用apply进行调用后, 无论是函数,还是方法都无效了。我们的 this, 由apply的第一个参数决定

注意:

如果函数或方法中没有 this 的操作, 那么无论什么调用其实都一样.

如果是函数调用foo(),那么有点像foo.apply(window).

如果是方法调用o.method(),那么有点像o.method.apply(o).

无论是call还是apply在没有后面的参数的情况下(函数无参数,方法无参数)是完全一样的。

第一个参数的使用也是有规则的

如果传入的是一个对象, 那么就相当于设置该函数中的 this 为参数

如果不传入参数, 或传入null、 undefiend 等, 那么相当于this默认为 window。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值