趣文网 > 作文大全

程序员:JS面向对象函数的四种调用模式 你都知道吗?

2020-11-28 00:10:01
相关推荐

问题描述

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

解决方法

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

1、任何函数都有属于自己的this2、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。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

三年级我的作文怎么写 难忘的一刻600字作文 文明之花处处开作文 七年级下英语作文 陀螺玩具作文 五彩田园作文 怎么在手机上制作文档 生活中的小确幸作文 有关项羽的作文 陶罐和铁罐作文 秋天的晚霞作文 自强自立作文600字 作文单词 与英雄有关的作文 开卷有益600字作文 2016高考作文题 蚂蚁觅食作文 给老师的一封信作文400 对父母说作文 什么伴我成长的作文 让我愤怒的一件事作文 秋天的景色作文200字 作文我明白了 我和书交朋友作文400字 秋天的园子作文 我的修正带作文 不会叫的狗作文 大扫除的作文 皇帝的新装作文600 推开一扇窗作文