W-函数参数的直接传递和匿名传递
函数参数的直接传递和匿名传递
notifier():前端消息处理器,用来统一处理WebSocket消息。
notifier#attachMessageEvent:添加消息事件,参数为事件event
事件event:由各个控制器定义,不同controller内自己定义、实现。比如新建newProjectController、刷新updateController
添加方式:假设事件实现为notifierMessage,如果notifierMessage内代码有this(使用了controller中的对对象),则只能使用箭头函数
1 | // updateController类中 |
区别总结
-
代码片段一:
-
- 使用了一个箭头函数来包裹对
this.notifierMessage
的调用。- 保证了
this
的正确上下文,即使notifierMessage
方法内部依赖于this
的值。
- 保证了
- 使用了一个箭头函数来包裹对
-
代码片段二:
-
- 直接传递
this.notifierMessage
方法给attachMessageEvent
。- 如果
notifierMessage
内部依赖于this
的值,并且该方法不是作为对象的方法被调用,可能会导致this
的值不符合预期。
- 如果
- 直接传递
注意:
notifier 添加的事件是 controller中的函数,所以当controller对象被回收时(没有controller对象引用时)这个事件也就失效了。即**对象被垃圾回收以后,其他 引用该对象方法的 方法,也会失效。**比如,controller 被回收以后,notifier中注册的该 controller 的 this.notifierMessage 方法也失效了。
评论