日期:2014-05-16  浏览次数:20405 次

Javascript 的函数式对象(五)配置注入式继承

在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应用中期望使用“继承”的场合。

?

?

?