函数的属性与方法

一、函数的属性与方法
每个函数都包含两个属性:length和prototype
每个函数都包含两个非继承而来的方法:apply()和call()
1、Length:当前函数希望接受的命名参数的个数
在这里插入图片描述

1、 apply ()和call() 改变this指向
这两个方法都是在特定的作用区域中调用函数,实际上等于设置函数体内的this对象值
apply ()接受两个参数:一个是函数运行的作用域,另一个参数数组(可以是数组实例也可以是arguments对象)
call方法第一个是函数运行的作用域,变化的是其余的参数都是传递参数,传递给函数的参数需要逐个列举出来
call与apply的方法: 借用其他对象的方法,并且绑定函数中的this
区别:
[A]、传参方式不一样
Call(绑定this的对象,参数1,参数2,参数3…)
apply(绑定this的对象,[参数1,参数2,参数3…])
[B]、length不一样,所有的函数都拥有length属性,代码的是形参的个数(期望传递的参数个数)
在这里插入图片描述

小案例:

在这里插入图片描述

Call、apply的作用:功能的完善、分组开发在统一调用、协调作战、分类

二、函数的内部属性
在函数内部,有两个特殊的对象:arguments和this
1、arguments
引用属性arguments.length检测函数的参数个数
函数运行时不会验证传递给函数的参数个数是否等于函数定义的参数个数,开发者定义的函数都可以接受任意个数的参数(最多可接受255个),而不会引发任何错误,任何遗漏的参数都会以undefined传递给函数,多余的函数将忽略
2、this
this是JavaScript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,随着函数的使用场合不同,this的值会发生变化,但是总有一个总则,那就是this指的是,调用函数的那个对象
注意:this跟函数在哪里定义没有半毛钱关系,函数在哪里调用才决定了this到底引用的是啥,也就是说this跟函数的定义没关系,跟函数的执行有大大的关系,所以,记住‘函数在哪里调用才决定了this到底引用的是啥
3、函数的上下文(复杂的this指向总结)
[1]、函数用圆括号调用,函数的上下文是window对象
所用的全局变量的都是window对象的属性,(注意:函数里面的局部变量,不是window的施行,不是任何东西的属性,它就是一个变量!!)
函数function fun(){}的上下文是什么!不要看他怎么定义,要看它怎么调用!!此时是fun()函数名称加上圆括号直接调用,此时上下文就是window对象
在这里插入图片描述

[2]、函数如果作为一个对象的方法,对象打点调用,函数的上下文就是这个对象
在这里插入图片描述

[3]、函数是事件处理函数,函数的上下文就是这个触发这个事件的对象
[4]、定时器调用函数,函数的上下文指向是window对象
[5]、数组中存放的函数,被数组索引调用,this就是这个数组
在这里插入图片描述

[6]、预编译函数,函数上下文this指向window
[7]、构造函数的this,指向实例化对象
[8]、通过apply或call可以改变this指向
在面向对象的写法当中,只要碰到函数里面嵌入函数,只要碰到事件处理函数,或在函数当中return了一个闭包,一定会涉及到this指向问题。
开发经验:绑定事件处理函数,放在外面单独写,好维护
4、bind方法
bind改变this指向后返回一个新的函数,但是不执行,call改变this指向并立即执行,两种的传参方式一样,bind挂在到 Funtion.prototype上 bind的两个特点: 不执行、实例化时this指向失效
用call/apply模拟bind,更改this指向,更改执行期上下文contant
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37150764/article/details/109082283
今日推荐