window.js代码段 Window.prototype =$.extend(...)最后返回的是一个全新的对象{}还是从new widget.Widget()扩展的对象。
Window.prototype= $.extend({},new widget.Widget(),{...}),返回的是全新对象{}里面包含key,value,还是一个new widget.Widget()对象实例的扩展对象?
这两个还是有区别的。如果是全新对象{},那么它的原型对象prototype是一个{},也就是object,如果是从new widget.Widget()对象实例的扩展对象,那么原型对象就包含{on:xxx,fire:xxx}这两个key value的map。debug跟踪下去,extends后返回的是全新对象{},将属性都挂载到了这个对象上了。像老师说的,混合了三个对象的实例。后面两个往第一个对象上加属性。从chrome的console上也可以看出来,打断点到window.js 的 return {Window:Window};这个代码段,控制台输入 Window.prototype得到如下实例,
Object {handlers: Object, on: function, fire: function, alert: function, prompt: function…}
on 和fire是挂在这个Object上的也就是window的prototype上,如果不显示,说明是挂在了new Widget()这个对象上了。