行为委托
6.1 委托
委托实际上相当于函数指针,C#里面学过了
6.1.1 类理论
使用类的时候,类设计模式鼓励你在继承时使用方法重写(和多态),比如说在xyz任务中重写Task中定义的一些方法。
6.1.2委托理论
首先定义一个Task的对象(和许多JS开发者告诉你的不同,它既不是类也不是函数),它会包含所有任务都可以视同()
Task={
setID:function(ID){this.id=ID},
outputID:function(){console.log(this.id);}
}
XYZ=Object.create(Task);
XYZ.prepareTask=function(ID,Label){
this.setID(ID);
this.label=Label;
}
XYZ.outputTaskDetails=function(){
this.outputID();
console.log(this.label);
}
1、在上面代码中,id和label数据成员都是直接存储在XYZ上(而不是Task上)。通常来说,在[[Prototype]]委托中最好把状态保存在委托者(XYZ,ABC) 而不是委托目标(Task)上。
2、在类设计模式中,我们故意父类(Task)和子类(XYZ)中都有outputTask方法这样就可以利用重写(多态)的优势了。
委托意味着某些对象(XYZ)在找不到属性或者方法引用时会把这个请求委托给另一个对象(Task)
这是一种及其强大的设计模式,和父类、子类、继承、多态等概念完全不同。
1、互相委托(禁止)
你无法在两个或者两个以上的委托对象之间创建循环委托。如果把B关联到A然后试着把A关联到B就会出错
2、调试
function Foo(){
var a1=new Foo();
}
a1;
看起来可以用JS的机制来解释Chrome的跟踪原理:
function Foo(){}
var a1=new Foo();
a1.constructor;
a1.constructor.name;
6.1.3 比较思维模型
理解委托这块还是建议去看C#的书籍,里面讲解委托全面而且比较好理解。这本书讲得有点啰嗦
6.2 类与对象
6.2.1 控件类
明天补上,睡觉了