先谢谢两位大大:xmliy和foolbirdflyfirst,你们的支持是我发帖的动力。
现经整理后的代码如下: var Class = function(init){ //类模板
var fn = function(){
if(init._init && typeof init._init == 'function'){
this._init.apply(this,arguments);
}
}
if(typeof init == 'object'){
fn.prototype = init;
}
return fn;
}
var PopupLayer = new Class({ //弹出层类
options:{
x:"123",
onStart:function(){}
},
_init:function(a,b,options){
jQuery.extend(this.options,options);
this.bindCustomerEvent(); //调用bindCustomerEvent函数
$(this).trigger("onStart"); //执行自定义事件(jQuery方法)
},
bindCustomerEvent:function(){
$(this).bind('onStart', this.options.onStart); //绑定onStart自定义事件
}
});
var myPopup = new PopupLayer("#bb","#p1",{ //弹出层实例
eventType:"click",
onStart:function(){ //实例的自定义事件
alert(this.options.eventType);
}
});虽然是实现了自定义事件,可是明显bindCustomerEvent方法是不应该在PopupLayer类里实现的,执行bindCustomerEvent()方法也不应该被放在PopupLayer._init()函数中。
我现在的需求是这样把自定义事件放进Class类模板中解决,大致完成后可能是如下代码:var Class = function(init){ //类模板
var fn = function(){
if(init._init && typeof init._init == 'function'){
this._init.apply(this,arguments);
}
}
if(typeof init == 'object'){
fn.prototype = init;
}
//在这里的哪个地方,把bindCustomerEvent方法完成。谢谢大大们继续帮我解决问题
return fn;
}
var PopupLayer = new Class({ //弹出层类
options:{
x:"123",
onStart:function(){}
},
_init:function(a,b,options){
jQuery.extend(this.options,options);
$(this).trigger("onStart"); //执行自定义事件(jQuery方法)
}
});
var myPopup = new PopupLayer("#bb","#p1",{ //弹出层实例
eventType:"click",
onStart:function(){ //实例的自定义事件
alert(this.options.eventType);
}
});
现经整理后的代码如下: var Class = function(init){ //类模板
var fn = function(){
if(init._init && typeof init._init == 'function'){
this._init.apply(this,arguments);
}
}
if(typeof init == 'object'){
fn.prototype = init;
}
return fn;
}
var PopupLayer = new Class({ //弹出层类
options:{
x:"123",
onStart:function(){}
},
_init:function(a,b,options){
jQuery.extend(this.options,options);
this.bindCustomerEvent(); //调用bindCustomerEvent函数
$(this).trigger("onStart"); //执行自定义事件(jQuery方法)
},
bindCustomerEvent:function(){
$(this).bind('onStart', this.options.onStart); //绑定onStart自定义事件
}
});
var myPopup = new PopupLayer("#bb","#p1",{ //弹出层实例
eventType:"click",
onStart:function(){ //实例的自定义事件
alert(this.options.eventType);
}
});虽然是实现了自定义事件,可是明显bindCustomerEvent方法是不应该在PopupLayer类里实现的,执行bindCustomerEvent()方法也不应该被放在PopupLayer._init()函数中。
我现在的需求是这样把自定义事件放进Class类模板中解决,大致完成后可能是如下代码:var Class = function(init){ //类模板
var fn = function(){
if(init._init && typeof init._init == 'function'){
this._init.apply(this,arguments);
}
}
if(typeof init == 'object'){
fn.prototype = init;
}
//在这里的哪个地方,把bindCustomerEvent方法完成。谢谢大大们继续帮我解决问题
return fn;
}
var PopupLayer = new Class({ //弹出层类
options:{
x:"123",
onStart:function(){}
},
_init:function(a,b,options){
jQuery.extend(this.options,options);
$(this).trigger("onStart"); //执行自定义事件(jQuery方法)
}
});
var myPopup = new PopupLayer("#bb","#p1",{ //弹出层实例
eventType:"click",
onStart:function(){ //实例的自定义事件
alert(this.options.eventType);
}
});
实现自定义事件比较麻烦的就是这个this的传递,一般有以下几种方式可以处理:1、Bind
2、Closure
3、Arguments这三种方式都可以实现this的传递,不过就看自己怎么选择了。第1种会污染Function原型,第2种和第3种都有可能造成内存泄漏。