YDKJS05-委托

70 阅读1分钟

行为委托

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 控件类

明天补上,睡觉了