observer / listener 模式
button 实现 observer 的接口,里面一个 event 数组,一个事件的 function 加入时,function 加入到这个事件的 listener 数组,button 发生事件时,通知事件 function 数组的所有成员,执行。 若事件正在发生的同时又对这个事件加入(或删除)了一个listener,( this.firing = true ),则 this.listeners = this.listeners.slice(0) copy 一个新的数组,然后操作 this.listeners,不干扰当前的 loop
button -> component -> observer
reference :
slice:
var a; a = new Array("a","b","c","d","e"); document.write(a.slice(0,3) + "<br>"); document.write(a.slice(-3,4) + "<br>"); document.write(a.slice(0,-1) + "<br>"); document.write(a.slice(1) + "<br>"); document.write(a.slice(4,3)); var a; a = new Array("a","b","c","d","e"); document.write(a.slice(0,3) + "<br>"); document.write(a.slice(-3,4) + "<br>"); document.write(a.slice(0,-1) + "<br>"); document.write(a.slice(1) + "<br>"); document.write(a.slice(4,3));
这个示例用到了数组(Array)对象的Slice(start,[end])方法,该方法返回一个新数组,包含了源函数从start到 end 所指定的元素,但是不包括end元素,比如a.slice(0,3);如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度,比如a.slice(-3,4),相当于a.slice(2,4)。如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度,比如a.slice(0,-1)。如果省略 end ,那么 slice 方法将一直复制到源数组结尾,比如a.slice(1)。如果 end 出现在 start 之前,不复制任何元素到新数组中,比如a.slice(4,3)。
splice:
splice():在数组的任意位置进行添加,删除或者替换元素,直接修改数组对象
细节:
splice()有三个参数或三个以上参数,前两个是必须的,后面参数是可选的
进行添加:splice(起始项,0,添加项)
进行删除:splice(起始项,要删除的项个数)
进行替换:splice(起始项,替换个数,替换项) 这个其实是添加删除的共同结果
代码:
var m=["am","bm"] m.splice(1,0,"fm","sm");//在第一项后面添加fm和sm,返回am,fm,sm,bm alert(m); m.splice(2,1);//删除第二项后面一项(即第三项sm,返回am,fm,bm) alert(m); m.splice(2,1,"mm");//替换第二项后面一项(即第三项,返回am,fm,mm) alert(m);