这里为什么要改成箭头函数

这里为什么要改成箭头函数

视频中一带而过了

				init(){
					const audio = new Audio();
					audio.src = '...';
					
					audio.oncanplay = () =>{
						audio.play();
						this.status = 1;
					}
				}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕星星 2020-09-19 09:47:24

同学你好,问题解答如下:

1、audio是Audio()的实例,创建了一个audio标签

http://img1.sycdn.imooc.com//climg/5f6561e00916b83d03640051.jpg

http://img1.sycdn.imooc.com//climg/5f6561e709e63d2e06120035.jpg

普通函数中使用this,就会指向创建的这个元素。

2、是的,可以输出看下

http://img1.sycdn.imooc.com//climg/5f65624c09ebf89703610127.jpg

http://img1.sycdn.imooc.com//climg/5f65625409ff127f03470038.jpg

3、是封装好的。Audio构造函数和Image()是类似的,通过new就会创建并返回一个 HTMLAudioElement

祝学习愉快!

好帮手慕夭夭 2020-09-18 11:28:21

同学你好,是因为this指向问题,普通的函数中,this指向的是函数调用者。这里是audio调用的,那么this指向的就是audio,函数中,this.status相当于audio.status,status属性并不是audio的,所以写成普通函数,无法通过this调用类上面定义的属性和方法了。

http://img1.sycdn.imooc.com//climg/5f64287209de4b8806250144.jpg

而箭头函数的this,是在箭头函数创建时绑定的,即箭头函数中this就会指向类的实例,从而可以通过this调用类里面定义的属性和方法了。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 hyperse #1
    如果用普通函数,this就指向audio,audio是Audio()的实例对吗?然后改成箭头函数,this就指向init()方法所在的环境class AudioPlayer(),也就是实例化后的播放器类?那Audio()是js给我们封装好的播放器类?
    2020-09-18 22:07:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师