react合成事件和bind ,call,apply的区别和联系

1.react 的合成事件
react是虚拟dom 创建好以后挂在到真实的dom 上,所以react 中的事件(点击,滑动,触摸)机制也是虚拟的,react 为了防止滥用dom 的事件,同时屏蔽不同浏览器的差异,实现了一种合成事件层。在react 中当dom 层被点击的时候,然后事件冒泡直至document 层,document监听了所有的点击事件然后再响应在组件初始化的时候,绑定在组件上响应的方法。至此,便引出了bind 方法。
原生事件无论是冒泡还是捕获事件,都会比react 的合成事件执行早

2.apply,call,bind
bind 用到的地方: react以前的写法,用于绑定方法。将class 中的方法,绑定到组件下面,like this

class Index extends Component {
 constuctor(props) {
this.onSubmit  = this.onSubmit.bind(this);
}
onSubmit(){
...
}
}

bind 的用法和call 一样,第一个参数都是this,可以不传。然后就是位置参数,传入字符串,可以传多个。区别就是bind 返回的是一个方法。执行的时候,需要在后面加一个括号,然后运行。

var name = '小王',age = 17;

var obj ={

name:'小张',

objAge:this.age,

myfn:function(){

    console.log(this.name+"年龄"+this.age);
    }
}

var db = {

name:'德玛',
age:99

}

let bindfn=obj.myfn.bind(db);

 //obj.myfn.bind(db)();

//obj.myfn.call(db);

//obj.myfn.apply(db);

bindfn();

//德玛年龄99

bind 不加括号就是将myfn 打印一下,bindfn 和obj.myfn 是同一个方法体,只不过是所属的对象不一样。

call 和apply 的用法区别只是apply的第二个参数是一个数组,可以将参数以数组的形式传进去。

可以这样理解,bind ,apply,call三个方法都是很一般的方法,当我们传入第一个参数this 的时候,就是告诉了浏览器,this所代表的这个方法也有了bind 前面的foo方法。第二个参数和以后的参数,都是为foo 提供参数的。

 3还有一点,箭头函数也可以有bind ,apply ,call方法的,只不过第一个参数,也就是this ,会被箭头函数忽略掉
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值