Javascript功能实现结合和班6事件绑定功能
功能的结合
箭头功能可以绑定对象,大大降低了这个对象的显式绑定(电话,申请,绑定)。然而,箭头功能并不适用于所有的情况,所以ES7提出函数绑定运营商来取代电话,申请和绑定电话。尽管语法建议ES7,巴别塔的转码器一直支持。
函数绑定操作符是一个并行的双冒号(::),双冒号的左边是一个对象,右边是一个函数,操作符自动将左边的对象作为上下文(或这个对象)绑定到右边的函数。
酒吧;
等效
Bar.bind(食品);
酒吧…参数);
等效
Bar.apply(Foo,参数);
const hasownproperty = object.prototype.hasownproperty;
功能也不尽相同(obj,关键){
返回的对象::hasownproperty(关键);
}
如果双冒号的左边是空的,右边是一个对象的方法,它等于将方法绑定到对象。
VaR方法=目标::obj.foo;
等效
VaR方法=::obj.foo;
让日志=::console.log;
等效
var日志= console.log.bind(控制台);
由于双冒号操作符或原始对象的返回,可以使用链式样式。
进口{地图,takeWhile,foreach }从iterlib ;
getplayers()
::地图(x)=(x.character)
::takeWhile(X = > x.strength > 100)
::foreach(x = console.log(x));
两个案例
{找到,HTML } =卫国明;
document.queryselectorall(div.myclass )
查找(p)
::HTML(哈哈哈);
类中的事件绑定
总结
6提供了一个类,它提供了许多帮助模块。事件绑定到类为了使代码清晰,第二是使用类的变量和方法。然而,由于事件的回调函数不是类的实例对象触发的这个变量的类不能在事件的回调函数访问。此外,我们不希望事件的回调函数被暴露在外,因此调用者可以直接调用。
简言之,我们希望:
1。事件回调函数应该能够访问类的这个变量。
2。事件回调函数不能直接调用。
如何访问这个类
方案1:将类作为本地变量保存
这种引用是动态变化的,但是局部变量的描述是清晰的,函数定义的局部变量可以在整个函数中使用,因此,我们可以使用这个=来保存类的这个变量。
类{
绑定 /方法
BindEvent(){
让那个=这个;
this.button1.on(听到咔哒声,功能(e){
This.addClass(); / /这是指元素
that.dosomething(); / /指向这类的
})
}
DoSomething(){
事件处理程序
}
/ /分拆事件
UnBindEvent(){
this.button1.off();
}
}
这种方法是有效的只有当使用jQuery,因为jQuery绑定事件不需要提供一个回调函数,并直接关好,但原生js需要提供回调函数,这是有原因的,因为相同的元素相同的事件可以绑定多个回调,所以你需要指出释放。
方案二:使用绑定()来改变这个方向
与A级,MouseMove事件被添加到一个,和下面的代码是根据要求写:
类{
添加事件
AddEvent(){
Document.addEventListener('mousemove,移动鼠标,假);
}
添加事件
removeevent(){
Document.removeEventListener('mousemove,移动鼠标,假);
}
}
事件回调函数
功能onmousemove(事件){
console.log(本); / / #文件
}
然而,这是让这不到上课的方式,这对移动鼠标指向文件。因为事件被添加到文档,文档是由自然事件和通过鼠标移动时触发,所以这在移动鼠标指向文件。
正确的做法是使用bind()函数在鼠标移动到这个方向的变化和移动事件回调到课外。
类{
添加事件
AddEvent(){
Document.addEventListener('mousemove ',onmousemove.bind(这),假);
}
添加事件
removeevent(){
Document.removeEventListener('mousemove ',onmousemove.bind(这),假);
}
}
事件回调函数
功能onmousemove(事件){
console.log(本);
}
但仍然存在一个问题,事件不会被移除!因为每一this.bind()调用返回一个新的功能,所以:
Document.addEventListener('mousemove ',onmousemove.bind(这),假);
和
Document.removeEventListener('mousemove ',onmousemove.bind(这),假);
二者的第二个参数是不同的。
正确的做法是将绑定()的结果保存到变量中:
类{
构造函数(){
这个_onmousemove = onmousemove.bind(本); / /这里
}
添加事件
AddEvent(){
Document.addEventListener('mousemove ',这个_onmousemove,假);
}
添加事件
removeevent(){
Document.removeEventListener('mousemove ',这个_onmousemove,假);
}
}
事件回调函数
功能onmousemove(事件){
console.log(本);
}
如何定义私有事件回调函数
在java中,不想接触外面的世界的方法可以被定义为私有方法,但不提供私人ES6方法只能在某些方面模拟。然而,事件回调函数是比较特殊的,因为该事件已成为除定义删除,使额外的麻烦。但仍然有一种:
使用符号变量定义
const _onmousemove =符号(_onmousemove );
类{
构造函数(){
这_onmousemove } = { onmousemove.bind(本);
}
添加事件
AddEvent(){
Document.addEventListener('mousemove ',这_onmousemove { },假);
}
添加事件
removeevent(){
Document.removeEventListener('mousemove ',这_onmousemove { },假);
}
}
事件回调函数
功能onmousemove(事件){
console.log(本);
}
符号(_onmousemove )将有一个独特的价值,这个价值只生成一个对象被创建时,所以没有办法知道对方的价值,所以在写代码时,不能调用使用该值命名的方法,如一个私有方法的定义。
更多相关内容可以看到特殊站:ecmascript6(6),Javascript教程总结
希望这篇文章会帮助大家以ECMAscript为基础的编程。