Extjs 事件的 observer / listener 模式

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); 

 

 

你可能感兴趣的:(C++,c,C#)