window.onload = function(){
//简单模拟的一个例子,不完善,指在模拟ext的监听中的回调参数是怎么传值的
var Component = function(){
//内部处理...
var tempA = '第一个参数对象';
var tempB = '第二个参数对象';
var resultObj = {
/**
* 添加事件监听方法
* @params {String} name 时间名称
* @params {Function} fn 监听处理回调函数
* @params {Object} scope 作用域
*/
addListener:function(name,fn,scope){
//模拟的事件监听(Ext具体实现不是这样的,模拟它监听里的回调,顺便讲下它的参数怎么传的)
if('load'){
fn.call(scope||this,tempA,tempB);//这些回调参数都是内部变量,因此你无法改变这些传递的参数,但可扩展这些方法~使这些方法符合自己的需求
}
}
};
return resultObj;
}
var com = new Component();
var com1 = new Component();
var com2 = new Component();
var testThis = {
testFn:function(){
alert('测试');
}
};
com.addListener('load',function(a,b){
alert(a+b);
this.testFn();
},testThis);
//这个scope指向了testThis,因此回调里可以使用this.方法名()的形式,但如下则不可
com1.addListener('load',function(a,b){
alert(a+b);
//this.testFn();
});
com2.addListener('load',function(a,b){
//this.testFn();
},this);//...等等,这里要理解作用域和this的概念
//但这样却可以,可是加上var 却不可以~~ so 你先理解上述概念再说。
testFn2 = function(){
alert('测试2');
}
com2.addListener('load',function(a,b){
this.testFn2();
},this);
}
讲解和代码混合在一块了,仔细阅读讲解,希望能懂。 不懂请看书.
答网友问~
最新推荐文章于 2024-07-19 11:30:21 发布