让对象向对象借用行为
在原型模型中,对象能够沿指向其他对象的关系寻找所需行为。若当前对象没有某项属性或方法,系统按照查找规则继续寻找原型或父对象。这样可以从一个已有对象扩展新对象,不要求先独立建立完整的类层级;对象关系本身便参与了程序的组织。
自己的属性与共享属性
继承查找不等于把原型上的全部属性复制到每个对象里。对象可以保留自己的属性,查找时优先取得它;同名属性便可能遮蔽原型上的值。JavaScript的原型链说明了这种逐级寻找的模型,而Self使用父槽与消息查找规则,具体结构不能直接视为完全相同。
共享对象的修改会传播
若多个对象都从同一原型读取某个值,修改共享原型可能影响它们以后读到的结果;已经有同名自有属性的对象则可能继续取得自己的值。程序因此要分清修改对象自身与修改共享来源。复制对象是否深拷贝内部数据,也是另一项问题,不能由“克隆”这个名称直接推定。
类式语法与原型机制可以共存
一种语言使用class语法,不代表它在底层完全放弃原型关系。JavaScript的类语法与其原型模型可以同时存在;Self则用对象与槽解释方法和委托。比较Io、Self与JavaScript时,应看实际查找及状态规则,而不只数语法中有没有“类”这个关键字。