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

在 js 中,不管是函数, 仍是方法, 仍是事件, 仍是构造器...这些东西的本质都是函数,其中的区别只是所处的位置不一样。根据函数内部this的指向不一样,能够将函数的调用模式分红4种:函数模式、方法模式、构造器模式和上下文模式等四种不一样的调用模式。数组

解决方法:
首先先来分析this指向问题:浏览器

一、任何函数都有属于本身的thisapp

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

一、this是属于哪一个函数的this

二、这个函数的调用模式是哪一种对象

四种调用模式事件

一、函数模式字符串

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

this 的含义: 在 函数中 this 表示全局对象, 在浏览器中this表示window。
注:任何自调用函数都是函数模式
二、方法模式
特征: 方法必定是依附于一个对象,将函数赋值给对象的一个属性,那么就成为了方法。构造函数

this的含义:这个依附的对象
注:arguments 这种伪数组, 或者 [] 数组这样的对象中, 这样调用函数也是方法调用, this 会只指向对象。
三、构造器模式(构造函数模式,构造方法模式)
特征:
(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 后面的对象

四、上下文调用模式

特征:上下文调用模式也叫方法借用模式,分为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。

相关文章
相关标签/搜索