有关设计模式的面试题

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		<script type="text/javascript">
			var Event = {
				// 通过on接口监听事件eventName
				// 如果事件eventName被触发,则执行callback回调函数
				on: function(eventName, callback) {
					//你的代码 注册事件
					/*if(!this.obj){             
						this.obj={};         
					}  *///只满足测试1的要求   
					if(!this.obj){
						Object.defineProperty(this,"obj",{
							enumerable:false,
							value:{}
						});
					}
					if(!this.obj[eventName]){	
						this.obj[eventName] = [callback];  
					}
					else{
						this.obj[eventName].push(callback);
					}
								
				},
				// 触发事件 eventName
				emit: function(eventName) {
					//你的代码 发布事件
					if(this.obj[eventName]){
						for(var i=0; i<this.obj[eventName].length; i++){                 
							this.obj[eventName][i](arguments[1]);             
						}         
					}
				}
			};
			
			
			// 测试1
			Event.on('test', function(result) {
				console.log(result);
			});
			Event.on('test', function() {
				console.log('test');
			});
			Event.emit('test', 'hello world'); // 输出 'hello world' 和 'test'
			
			
		
			// 测试2
			var person1 = {};
			var person2 = {};
			
			Object.assign(person1, Event);
			Object.assign(person2, Event);
			
			person1.on('call1', function() {
				console.log('person1');
			});
			
			person2.on('call2', function() {
				console.log('person2');
			});
			
			person1.emit('call1'); // 输出 'person1'
			person1.emit('call2'); // 没有输出
			person2.emit('call1'); // 没有输出
			person2.emit('call2'); // 输出 'person2'
			
			
			
		</script>
	</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值