在EXT中,像下面这样实例化对象的方式很常见:
?
var extWindow = new Ext.Window({ title: 'EXT WINDOW', modal: 'true', width:800, height:250, ...... });
?
在创建实例的过程中,Ext.Window类的构造方法被注入一个config对象。
?
该config对象中的属性和方法的将会覆盖Ext.Window的同名属性和方法,
?
或是直接在config对象中定义全新的方法。这样创建的实例,个个都与众不同。
?
如果传入的config对象是空,这将创建一个具有默认属性和方法的实例。
?
下面的代码示例模拟了EXT中“配置注入”的实现:
?
var TreeItem = function(config){ this.label = 'default tree item'; this.print = function(){ console.log('This is a '+this.label); }; for(methodName in config){ this[methodName] = config[methodName]; } } //开始创建TreeItem的实例 var modifiedTreeItem = new TreeItem({ label: 'instance of tree item', print: function(){ console.log('This is an '+this.label); } }); modifiedTreeItem.print(); // print “This is an instance of tree item” var defaultTreeItem = new TreeItem({}); defaultTreeItem.print(); // print “This is a default tree Item”
?
EXT对象的实际创建过程比这要复杂很多。
?
这种“配置注入”式创建实例的方法,不仅能重用对象共性,而且结构简单清晰,
?
可替代大多数js应用中期望使用“继承”的场合。
?
?
?