新蒲京澳门娱乐:为自定义对象添加自定义事件

因为javascript并没有自己的事故系统,借助于DOM的事故系统,假如只涉及到javascript工具就歇菜了。下面是一个仿制品,不要指望有事故冒泡这器械。if(typeofArray.prototype.forEach!=="function


当前位置: 主页 >


因为javascript并没有自己的事故系统,借助于DOM的事故系统,假如只涉及到javascript工具就歇菜了。下面是一个仿制品,不要指望有事故冒泡这器械。

if(typeof Array.prototype.forEach !== "function"){

Array.prototype.forEach =function (fn, scope) {

for(var i=0,n=this.length>>>0;i 0);

},

attachEvent:fun新蒲京澳门娱乐ction(){

var args = this.$A(arguments),

type = args.shift(), callback = args.shift();

if (!this.hasEvent(type))

this._listeners[type] = [];

var listeners = this._listeners[type];

listeners.push({ callback:callback,args: args });

},

detachEvent:function(type,callback){

if (this.hasEvent(type)) {

var新蒲京澳门娱乐 listeners = this._listeners[type],listener;

if(typeof callback === "undefined"){

delete this._listeners[type];

}else{

for(var i=0,n=listeners.length;i

严格来说,这不能算一个类,应该叫接口的器械。当目标类实现它(把EventDispatcher的成员变成目标类的成员),并在原型中供给一个 events的字符串数组成员后,我们调用了createEvents,它就拥有事故般的行径,因为没有了DOM的监控,我们必要fireEvent来触发事故。

一个例子:

var Pe新蒲京澳门娱乐rson = function(name){

this.name = name

}

Person.protot新蒲京澳门娱乐ype = {

events:["layout"]

}

var include = function(Concrete,Interface){//应用ruby式的命名要领,用于添加实例成员

for(var prop inInterface) {

Concrete.prototype[prop] = Interface[prop];

}

}

include新蒲京澳门娱乐(Person,EventDispatcher );

var p = new Person("司徒正美")

p.createEvents()

p.onLayout(function(name){

alert(name)

});

p.onLayout(function(name){

alert(name+"!!")

});

p.fireEvent("layout","参数")//依次弹出 "参数" "参数!!"

司徒正美

运行代码

发表评论
加载中...

相关文章