日期:2014-05-16 浏览次数:20513 次
在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应用中期望使用“继承”的场合。
?
?
?