js函数调用模式

函数模式

简单的函数调用,前面没有任何引导内容

function foo(){}
var func=function(){};
...

foo();
func();
(function(){})()

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

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

方法模式

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

function f(){
   this.method=function(){}
}

var f={
   method:function(){}
}

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

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

arguments对象不是一个Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。例如,它没有pop 方法。但是它可以被转换为一个真正的Array

var args=Array.prototype.slice.call(arguments);
var args=[].slice.call(arguments);

// ES2015
const args=Array.form(arguments);
const args=[...arguments];

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

  • 使用 new 引导构造函数, 创建了一个实例对象
  • 在创建对象的同时, 将this指向这个刚刚创建的对象
  • 在构造函数中, 不需要 return , 会默认的 return 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。

猜你喜欢

转载自www.cnblogs.com/lulu090110/p/12943618.html