[[Prototype]]机制是一种存在于一个对象上的内部链接,它指向一个其他对象。
当一个属性/方法引用在第一个对象上发生,而这样的属性/方法又不存在时,这个链接就会被使用。在这种情况下,[[Prototype]]链接告诉引擎去那个被链接的对象上寻找该属性/方法。接下来,如果那个对象也不能满足查询,就沿着它的[[Prototype]]查询,如此继续。这种对象间一系列的链接构成了所谓的“原型链”。
换句话说,对于我们能在JavaScript中利用的功能的实际机制来说,其重要的实质全部在于被连接到其他对象的对象。
类:
定义一个泛化的父类(基类)比如Task,为所有的“同类”任务定义共享的行为。然后,你定义子类XYZ和ABC,它们都继承自Task,每个都分别添加了特化的行为来处理各自的任务。
重要的是, 类设计模式将鼓励你发挥继承的最大功效,当你在XYZ任务中覆盖Task的某些泛化方法的定义时,你将会想利用方法覆盖(和多态),也许会利用super来调用这个方法泛化版本,为它添加更多的行为。你很可能会找到几个可以“抽象”到父类中,或在子类中特化(覆盖)的地方。
委托:
你将首先定义一个称为Task的 对象(不是一个类,也不是一个大多数JS开发者想让你相信的function),而且它将拥有具体的行为,这些行为包含各种任务可以使用的(读作:委托至!)工具方法。然后,对于每个任务(“XYZ”,“ABC”),你定义一个 对象 来持有这个特定任务的数据/行为。你 链接 你的特定任务对象到Task工具对象,允许它们在必要的时候可以委托到它。
基本上,你认为执行任务“XYZ”就是从两个兄弟/对等的对象(XYZ和Task)中请求行为来完成它。与其通过类的拷贝将它们组合在一起,我们可以将他们保持在分离的对象中,而且可以在需要的情况下允许XYZ对象来 委托到 Task。
具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。