当前位置:网站首页>ES6中的函数进阶学习
ES6中的函数进阶学习
2022-07-07 07:20:00 【小白啥时候能进阶成功】
1、函数定义方式
//1.自定义函数(命名函数)
function fn(){
}
//2.函数表达式(匿名函数)
var fun = function(){
console.log("fun");
}
fun();
//3.利用new Function('参数1','参数2','函数体')
var f = new Function('a','b','console.log(a+b)');
f(1,2);函数也属于对象。
2、函数的调用
//1.普通函数
function fn(){
console.log("this is a fun");
}
fn();//或采用fn.call();
//2.对象的方法
var o ={
sayHi :function(){
console.log("this is a object fun");
}
}
o.sayHi();
//3.构造函数
function Star(){
console.log('constructor fun');
}
let ldh = new Star();
//4.绑定事件函数
btn.onclick = function(){
console.log('btn click fun')
};//点击了按钮就可以调用这个函数
//5.定时器函数
setInterval(function(){console.log('setInterval fun')},1000);
//6.立即执行函数
(function(){
console.log('lijizhixing ');
})()3、this的指向问题
//1.普通函数-this指向window
function fn(){
console.log('1fn:'+this);
}
window.fn();
//2.对象的方法-this指向o这个对象
var o ={
sayHi :function(){
console.log(this);
}
}
o.sayHi();
//3.构造函数-this指向ldh这个实例对象
function Star(){
console.log(this);
}
let ldh = new Star();
//4.绑定事件函数-this指向btn这个按钮
btn.onclick = function(){
console.log(this);
};
//5.定时器函数-this指向window
window.setTimeout(function(){console.log(this);},1000);
//6.立即执行函数-this指向window
(function(){
console.log(this);
})()总结:
| 调用方式 | this指向 |
| 普通函数 | window |
| 构造函数 | 实例对象(原型对象中的方法也指向实例对象) |
| 对象方法 | 该方法所属对象 |
| 事件绑定 | 绑定事件对象 |
| 定时器 | window |
| 立即执行函数 | window |
4、改变函数内部this指向
常用的有call()、apply()、bind()三种方法
1、call方法
var o ={
name:'liming',
fun:function(){console.log('object');}
}
function fn(a,b)
{
console.log(this);
console.log(a+b);
}
fn.call(o,1,2);//call的使用方法
//主要应用-继承
function Father(uname,age)
{
this.uname = uname;
this.age = age;
}
function Son(uname,age)
{
Father.call(this,uname,age);
console.log('this name:'+this.uname);
}
let son1 = new Son('liming',18);
2、apply方法
var o ={
name:'liming',
fun:function(){console.log('object');}
}
function fn(a,b)
{
console.log(this);
console.log(a+b);
}
fn.apply(o,[2,3]);//apply的用法,后面参数必须为数组
//主要应用案例-利用Math求最大值
var arr =[1,3,5,66,23,123];
let maxNum = Math.max.apply(Math,arr);
let minNum = Math.min.apply(Math,arr);
console.log("maxNum:"+maxNum+',minNum:'+minNum);3、bind方法(使用最多)
var o ={
name:'liming',
fun:function(){console.log('object');}
}
function fn(a,b)
{
console.log(this);
console.log(a+b);
}
//使用方法一
let newFn = fn.bind(o);//bind的用法,他不调用函数,返回由指定this的原函数的拷贝
newFn(2,3);
//使用方法二
let newFn2 = fn.bind(o,2,3);//bind的用法,他不调用函数,返回由指定this的原函数的拷贝
newFn2();主要应用案例一
var o ={
name:'liming',
fun:function(){console.log('object');}
}
function fn(a,b)
{
console.log(this);
console.log(a+b);
}
//使用
let newFn = fn.bind(o);//bind的用法,他不调用函数,返回由指定this的原函数的拷贝
newFn(2,3);
//主要应用
btn.onclick = function(){
this.disabled = true;//这里的this指向按钮
setTimeout(function(){
this.disabled = false;//这里的this指向window
}.bind(this),3000);//bind绑定后,上面的this改为了按钮
//等价于
// let fun =function(){
// this.disabled = false;//这里的this指向window
// }.bind(this);
// setTimeout(fun,3000);//bind绑定后,上面的this改为了按钮
}区别点:
- call和apply会调用函数,并且改变函数内部this指向。
- call和apply传递的参数不一样,call传递参数arg1,arg2...,apply必须是数组形式[arg1,arg2...]
- bind不会调用函数,可以改变函数内部的this指向
主要应用场景:
- call经常做继承
- apply经常和数组有关系。例如借助数学对象实现数组最大值最小值
- bind不调用函数,但是还想改变this指向。例如改变定时器内部的this指向。
边栏推荐
- Elaborate on MySQL mvcc multi version control
- [bw16 application] Anxin can realize mqtt communication with bw16 module / development board at instruction
- Selenium+bs4 parsing +mysql capturing BiliBili Tarot data
- Win10安装VS2015
- 20排位赛3
- How to become a senior digital IC Design Engineer (5-2) theory: ULP low power design technology (Part 1)
- 洛谷P2482 [SDOI2010]猪国杀
- Check the example of where the initialization is when C initializes the program
- CDZSC_2022寒假个人训练赛21级(2)
- First issue of JS reverse tutorial
猜你喜欢

ORM--分组查询,聚合查询,查询集QuerySet对象特性
![[Frida practice]](/img/20/fc68bcf2f55b140d6754af6364896b.png)
[Frida practice] "one line" code teaches you to obtain all Lua scripts in wegame platform

Official media attention! The list of top 100 domestic digital collection platforms was released, and the industry accelerated the healthy development of compliance

AI moves from perception to intelligent cognition

农牧业未来发展蓝图--垂直农业+人造肉

Flex flexible layout

企业实战|复杂业务关系下的银行业运维指标体系建设

arcgis操作:dwg数据转为shp数据

ORM--查询类型,关联查询

What development models did you know during the interview? Just read this one
随机推荐
**Grafana installation**
用flinksql的方式 写进 sr的表,发现需要删除的数据没有删除,参照文档https://do
运用tensorflow中的keras搭建卷积神经网络
HCIP 第一天 笔记整理
ORM--数据库增删改查操作逻辑
C# 初始化程序时查看初始化到哪里了示例
Flinkcdc failed to collect Oracle in the snapshot stage. How do you adjust this?
PostgreSQL reports an error when creating a trigger,
Diffusion模型详解
Arthas simple instructions
EXT2 file system
2020CCPC威海 J - Steins;Game (sg函数、线性基)
【ORM框架】
CSDN salary increase technology - learn about the use of several common logic controllers of JMeter
为什么安装mysql时starting service报错?(操作系统-windows)
Qualifying 3
根据热门面试题分析Android事件分发机制(一)
Three years after graduation
flink. CDC sqlserver. You can write the DEM without connector in sqlserver again
洛谷P2482 [SDOI2010]猪国杀