`
wyf
  • 浏览: 436538 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

Js 观察者模式

    博客分类:
  • JS
 
阅读更多
function EventTarget(){
 this.handlers = {};
}
EventTarget.prototype = {
 constructor: EventTarget,
 addHandler: function(type, handler){
 if (typeof this.handlers[type] == "undefined"){
 this.handlers[type] = [];
 }
 this.handlers[type].push(handler);
 },
 fire: function(event){
 if (!event.target){
 event.target = this;
 }
 if (this.handlers[event.type] instanceof Array){
 var handlers = this.handlers[event.type];
 for (var i=0, len=handlers.length; i < len; i++){
 handlers[i](event);
 }
 }
 },
 removeHandler: function(type, handler){
 if (this.handlers[type] instanceof Array){
 var handlers = this.handlers[type];
 for (var i=0, len=handlers.length; i < len; i++){
 if (handlers[i] === handler){
 break;
 }
 }
 handlers.splice(i, 1); 
 }
 }
}; 

 

function handleMessage(event){
 alert("Message received: " + event.message);
}
//创建一个新对象
var target = new EventTarget();
//添加一个事件处理程序
target.addHandler("message", handleMessage);
//触发事件
target.fire({ type: "message", message: "Hello world!"});
//删除事件处理程序
target.removeHandler("message", handleMessage);
//再次,应没有处理程序
target.fire({ type: "message", message: "Hello world!"}); 

 继承

function Person(name, age){
 EventTarget.call(this);
 this.name = name;
 this.age = age;
}
inheritPrototype(Person,EventTarget);
Person.prototype.say = function(message){
 this.fire({type: "message", message: message});
}; 

 

function inheritPrototype(subType, superType){
 var prototype = Object.create(superType.prototype); //创建对象
 prototype.constructor = subType; //增强对象
 subType.prototype = prototype; //指定对象
} 

 

function handleMessage(event){
 alert(event.target.name + " says: " + event.message);
}
//创建新 person
var person = new Person("Nicholas", 29);
//添加一个事件处理程序
person.addHandler("message", handleMessage);
//在该对象上调用 1 个方法,它触发消息事件
person.say("Hi there."); 

 

分享到:
评论

相关推荐

    js观察者模式列子js观察者模式列子

    总结来说,JavaScript观察者模式是一种强大的工具,它可以简化代码结构,提高代码可维护性,尤其在需要处理复杂的交互和实时数据同步时。通过理解并应用这个模式,开发者可以更有效地构建可扩展和灵活的应用程序。

    javascript观察者模式Watch.JS.zip

    一个比较有意思的js库可以为javascript的对象实现观察者模式,以往我们使用javascript实现的观察者模式都是通过使用回调函数配合dom上的event事件来操作的,而“Watch.js”可以为javascript的对象实现观察者模式,...

    javascript观察者模式有什么方法_javascript观察者模式有哪些方法.docx

    ### JavaScript观察者模式详解 #### 一、观察者模式概念 观察者模式(Observer Pattern)是一种行为设计模式,用于定义对象间的一种一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

    javascript实现观察者模式

    以下是一个简单的JavaScript观察者模式实现: ```javascript class Subject { constructor() { this.observers = []; } addObserver(observer) { this.observers.push(observer); } removeObserver...

    JavaScript观察者模式(经典).docx

    JavaScript观察者模式是一种基于事件驱动的设计模式,它允许对象在状态改变时自动通知其他相关对象。这个模式在软件开发中非常常见,特别是在JavaScript这样的动态语言中,因为JavaScript的事件模型就是观察者模式的...

    javascript观察者模式实现自动刷新效果.docx

    ### JavaScript观察者模式实现自动刷新效果 #### 一、引言 在JavaScript开发中,观察者模式(Observer Pattern)是一种常见的设计模式,用于处理对象之间的依赖关系。它定义了一种一对多的依赖关系,以便当一个...

    JavaScript观察者模式(经典)

    在JavaScript这种事件驱动的语言中,观察者模式有着天然的应用场景,比如DOM事件的处理、Ajax请求的响应等。 观察者模式主要包含以下几种角色: 1. Subject(被观察者):它持有注册的观察者的列表,并负责在状态...

    观察者模式最佳实践

    此外,现代前端框架如React和Vue.js也利用类似的观察者模式实现组件间的通信和状态管理。 总之,掌握观察者模式可以帮助我们构建更加灵活、可扩展的系统,提高代码的复用性和可维护性。通过最佳实践的学习,可以...

    观察者模式(Observer)

    在实际开发中,很多框架和库也内置了观察者模式,如JavaScript中的EventEmitter(Node.js)、C#的事件和委托,以及Android中的BroadcastReceiver等。这些工具使得开发者可以更便捷地应用观察者模式,提高代码的可...

    观察者模式学习

    除了标准实现,还有很多其他语言和框架提供了观察者模式的支持,例如在C#中,可以使用System.ComponentModel.INotifyPropertyChanged接口来实现,而在JavaScript中,可以通过事件监听器或者发布/订阅模式来实现类似...

    JavaScript中的观察者模式:构建响应式编程的基石

    在JavaScript中,观察者模式可以通过多种方式实现,包括自定义事件、发布/订阅模式等。本文将详细介绍如何在JavaScript中实现观察者模式,并探讨其在现代Web开发中的应用。 观察者模式是JavaScript中实现事件驱动...

    【JavaScript源代码】详解从vue的组件传值着手观察者模式.docx

    【JavaScript源代码】详解从vue的组件传值着手观察者模式 在JavaScript中,Vue框架是一种广泛应用的前端开发工具,其核心设计思想包含了观察者模式的元素。观察者模式是一种软件设计模式,它定义了对象间的一种一对...

    JavaScript设计模式中的单例模式和观察者模式.docx

    ### JavaScript设计模式详解:单例模式与观察者模式 #### 一、单例模式 **定义**:单例模式是一种常用的软件设计模式,其目的是确保某个类只有一个实例,并且能够提供一个全局访问点来访问该实例。在JavaScript中...

    js观察者模式的弹幕案例

    本文实例为大家分享了js观察者模式的弹幕案例代码,供大家参考,具体内容如下 观察者模式的弹幕案例 上代码 弹幕.html: &lt;!DOCTYPE html&gt; &lt;html lang=en&gt; &lt;head&gt; &lt;meta charset=UTF-8&gt; &lt;...

    JavaScript观察者模式(publish/subscribe)原理与实现方法

    本文实例讲述了JavaScript观察者模式(publish/subscribe)原理与实现方法。分享给大家供大家参考,具体如下: 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这...

    观察者模式.pdf

    在JavaScript中,观察者模式也被称为发布者-订阅者模式,其中包含两个主要角色:发布者(Publisher)和订阅者(Subscriber)。 1. 发布者(Publisher): 发布者是状态发生变化的对象,当它的状态改变时,会通知...

    我理解的 js 的观察者模式 Observable

    在JavaScript中,`EventEmitter`是Node.js中的一个核心模块,它是实现观察者模式的一个典型例子。开发者可以通过`.on()`方法订阅事件,通过`.emit()`方法触发事件并通知所有订阅者。此外,`CustomEventTarget`接口在...

    javascript的oop思想以及单例,工厂,观察者模式简例

    本篇文章将深入探讨JavaScript的OOP思想,并通过实际代码示例介绍单例模式、工厂模式和观察者模式。 首先,面向对象编程的核心概念是类和对象。在JavaScript中,虽然没有传统的类定义,但可以通过构造函数来模拟类...

    PHP观察者模式实例分析【对比JS观察者模式】

    在JavaScript中,我们可以看到一个简单的观察者模式实现。在给出的例子中,`select`元素作为被观察者,当用户选择不同的选项时,`select`元素会触发`onchange`事件。这个事件会通知所有已注册的观察者(`content`、`...

Global site tag (gtag.js) - Google Analytics