暴力分析backbone.js(7)

上一节分析到,Backbone.Events.on方法的javascript

  return this;

  来看一张图:java

  整个on方法,我把分红了2个部分,在传递正确的参数的状况下会执行褐红色框框内的内容,褐红色框框内的基本语法已经在上一节分析完了。可是咱们仔细想一想是否是缺了什么?api

  1. 上面那段if语句还没分析。
  2. 红色框框内已经分析完毕基础语法,可是还没分析它为什么这样写?

  好,咱们先来分析它为什么这样写?数组

  on方法的最基础写法:须要一个对象,它必须'融合'(融合这个词是我复制中文api的)Backbone.Events(绑定功能),说白了就是要能够用Events的功能。 我看一下最基本的2个参数,自定义事件名 && callback回调函数。(还有其余可选参数,暂且无论)函数

  想一想 自定义事件名 && 回调函数 在on方法是如何储存的?this

  先给做用域声明一个属性 _events。它是一个对象 cc._events = {}spa

  在给做用域下的属性_events,建立个[自定义函数名]的属性。它是保存一个数组地址的属性,因此它指向一个数组。为何要用键值来建立,有没有想过,若是用_events.name能够建立?不能够,name是一个形参,它保存着一个字符串。若是用键值的话,[变量],会把转换变量。3d

cc._events['console'] = []对象

试着用 对象.变量(字符串) 来建立一个属性,而且访问 blog

用键值 对象[变量(字符串)]来建立一个属性,而且访问

  而后用回调函数push到数组里。cc._events['console'] = [{callback:function(){console.log('cc')}}]

  看到到这段代码cc._events['console'] = [{callback:function(){console.log('cc')}}]有何想法?

  可不能够,不经过.trigger('console')来调用它,又或者不经过on来自定义事件,而后来调用?

  为何要用数组来存储回调函数呢?留一个悬念!

  还有一件事你们有没有发现一个冗余的地方,为何要多建立一个events的变量来引用(对象._events[自定义函数]的数组地址)呢?试着去掉events这个变量,而后来运行一下,结果仍是跑得通的,就是不知道有什么隐患!!

  

  去掉变量后,在来看一下这2行代码

  

  有没有想过,我建立一个新对象,赋予它Events的功能后,调用on方法:这2句表达式第一次所执行的都是后者,那怎么触发前者,前者有什么意义呢,固然有意义。来看如何触发。

  this._events 有值的时候即触发它,咱们建立过一个自定义函数之后,在建立一个自定义函数,就会触发 前者。

  this._events[name] 有值的时候即触发它,别说不可能,咱们给一个对象绑定2个一样名字的自定义函数,结果呢,是否是触发 前者?

  结果是 click1 click2

  到这里,还记得前面的悬念?为何要用数组来存储回调函数呢?

  这样就说得通了,由于同个自定义方法名,存储不一样的回调函数。

  

  假设不用trigger方法,该如何调用同个自定义方法的回调函数呢?

  解决思路:经过遍历数组长度来执行对象的回调函数。

 

  好,休息一下,下一节咱们分析完on方法,接着分析trigger方法。

相关文章
相关标签/搜索