javascript鸭式辩型法实现接口

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script charset="UTF-8" type="text/javascript">
			/**
			 * 创建接口类
			 */
			
			function Interface(name,methods){
				if(arguments.length<2){
					throw new Error('需要传递两个参数');
				}
				this.name = name;
				this.methods = [];
				for(var i = 1;i<methods.length;i++){
					var methodName = methods[i];
					if(typeof methodName !=='string'){
						throw new Error('方法要为字符串类型');
					}
					this.methods.push(methodName);
				}
			}
			
			var CompositeInterface = new Interface('CompositeInterface',['add','remove']);
			var FormItemInterface = new Interface('FormItemInterface',['select','update']);
			/**
			 * 创建实现类
			 */
			function MyImpl(){
				
			}
			
			/**
			 * 实现接口
			 */
			MyImpl.prototype.add = function(){
				alert('add...');
			}
			
			MyImpl.prototype.remove = function(){
				alert('remove...');
			}
			MyImpl.prototype.select = function(){
				alert('select...');
			}
			// MyImpl.prototype.update = function(){
				// alert('update...');
			// }
			
			/**
			 * 检测是否实现接口中的所有方法
			 */
			Interface.ensureImplements = function(object){
				if(arguments.length<2){
					throw Error('参数个数不能小于2个');
				}
				for(var j=1;j<arguments.length;j++){
					var interfaceInstance = arguments[j];
					if(interfaceInstance.constructor !==Interface){
						throw new Error(interfaceInstance+'不是所需接口实例');
					}
				
				
					for(var i = 0;i<interfaceInstance.methods.length;i++){
						var methodName = interfaceInstance.methods[i];
						if( !object[methodName] || typeof object[methodName] !=='function'){
							throw new Error(methodName+'不是函数或没有被实现');
						}
					}
				}
			}
			
			var c1 = new MyImpl();
				Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);
				c1.add();
		</script>
	</head>
	<body>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值