`
jobar
  • 浏览: 346907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面向对象的JS(6) 自定义异常和事件

    博客分类:
  • OOJS
 
阅读更多
1 自定义异常
在JavaScript中有内置的异常比如Error,TypeError和SyntaxError,这些异常可以在运行时创建抛出。每个异常是未受查的。一个普通对象可以用在异常抛出语句中。因此我们可以创建自定义的异常,并可以抛出和捕捉。自定义异常一个比较好的做法是继承JavaScript的标准Error对象。
function BaseException() {}
BaseException.prototype = new Error();
BaseException.prototype.constructor = BaseException;
BaseException.prototype.toString = function () {
    // note that name and message are properties of Error
    return this.name + ": "+this.message;
};

function NegativeNumberException(value) {
    this.name = "NegativeNumberException";
    this.message = "Negative number!Value: "+value;
}
NegativeNumberException.prototype = new BaseException();
NegativeNumberException.prototype.constructor = NegativeNumberException;

function EmptyInputException() {
    this.name = "EmptyInputException";
    this.message = "Empty input!";
}
EmptyInputException.prototype = new BaseException();
EmptyInputException.prototype.constructor = EmptyInputException;
var InputValidator = (function () {
        var InputValidator = {};
        InputValidator.validate = function (data) {
            var validations = [validateNotNegative, validateNotEmpty];
            for (var i = 0; i < validations.length; i++) {
                try {
                    validations[i](data);
                } catch (e) {
                    if (e instanceof NegativeNumberException) {
                        //re-throw
                        throw e;
                    } else if (e instanceof EmptyInputException) {
                        // tolerate it
                        data = "0";
                    }
                }
            }
        };
        return InputValidator;

        function validateNotNegative(data) {
            if (data < 0)
                throw new NegativeNumberException(data)
		}
		function validateNotEmpty(data) {
			if (data == "" || data.trim() == "")
				throw new EmptyInputException();
		}
        })();
    try {
        InputValidator.validate("-1");
    } catch (e) {
        console.log(e.toString()); // NegativeNumberException:Negative number!Value: -1
        console.log("Validation is done."); // Validation is done.
        var validations = [validateNotNegative, validateNotEmpty];
    }

2 自定义事件
自定义事件可以减少代码的复杂性并降低对象之间的耦合性。下面是一个典型的事件模式:
function EventManager() {}
var listeners = {};
EventManager.fireEvent = function (eventName, eventProperties) {
    if (!listeners[eventName])
        return;
    for (var i = 0; i < listeners[eventName].length; i++) {
        listeners[eventName][i](eventProperties);
    }
};
EventManager.addListener = function (eventName, callback) {
    if (!listeners[eventName])
        listeners[eventName] = [];
    listeners[eventName].push(callback);
};
EventManager.removeListener = function (eventName, callback) {
    if (!listeners[eventName])
        return;
    for (var i = 0; i < listeners[eventName].length; i++) {
        if (listeners[eventName][i] == callback) {
            delete listeners[eventName][i];
            return;
        }
    }
};
EventManager.addListener("popupSelected", function (props) {
    console.log("Invoked popupSelected event: "+props.itemID);
});
EventManager.fireEvent("popupSelected", {
    itemID: "100"
}); //

Invoked popupSelected event: 100
分享到:
评论

相关推荐

    自定义函数替换现有函数

    例如,如果你的团队倾向于使用面向对象编程,而现有的函数是过程式的,可以创建一个类方法来替代。 自定义函数的实现过程中,需要注意以下几点: 1. **命名规范**:确保函数名称能够清晰地表达其功能,遵循语言的...

    自定义Java开发框架

    在IT行业中,自定义Java开发框架是提升开发效率和代码质量的重要工具。它通常包括一系列设计模式、组件和工具,旨在简化项目的构建过程,提供快速的业务逻辑搭建能力,以及高效的表单管理和数据处理功能。"自定义...

    计算机应用技术-对象-教学课件.pptx

    本教学课件主要讲解的是面向对象的概念和技术,旨在帮助学生理解面向对象的思想和原则,并掌握 JavaScript 中的面向对象编程。 1. 面向对象概述 面向对象是指以对象为中心的编程思想,将数据和操作封装在对象中,...

    JavaScript权威指南第6版

    - **面向对象编程**:概述了JavaScript中实现面向对象编程的方法,包括原型链继承和ES6的class语法。 - **封装与多态**:讨论了如何通过私有属性和方法实现封装,以及多态性在JavaScript中的实现方式。 - **错误...

    thinkphp, ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP框架.zip

    6. **错误和异常处理**:ThinkPHP3.2提供了一套完善的错误和异常处理机制,方便开发者调试和定位问题。 7. **安全防护**:在安全性方面,ThinkPHP3.2内置了防止SQL注入、XSS攻击的防护措施,同时支持URL参数过滤和...

    js代码示例.rar

    7. **面向对象编程**:JS支持基于原型的面向对象编程,通过构造函数和`new`关键字创建对象实例。`this`关键字在对象方法中引用当前对象,`prototype`属性用于继承。ES6引入了类语法,虽然在语法层面更接近传统的面向...

    javascript简单计算器

    这个计算器通常包括加、减、乘、除等基本功能,对于初学者来说,这是一个很好的实践项目,能够帮助他们理解和掌握JavaScript的基本语法和事件处理。 首先,我们来看HTML部分。HTML(HyperText Markup Language)是...

    js-高性能JavaScript-JavaScript语言精粹修订版

    - 学习如何处理触摸事件和手势识别。 5. **DOM性能优化:** - 学习DOM操作的最佳实践。 - 掌握减少DOM重绘和重排的技术。 6. **DOM与现代前端框架:** - 了解DOM与React、Vue等现代前端框架的关系。 - 掌握...

    面向对象的PHP开发框架FCS版权所有者 liu21st[at]gmail.com。

    10. **JS类库**:集成了JavaScript库,支持前端开发,提高用户体验。 #### 四、FCS框架的应用场景 - **企业级应用**:适合于大型企业系统,如CRM(客户关系管理)、ERP(企业资源计划)等。 - **小型项目**:即使...

    delphi与JavaScript进行交互,获取JS端返回值

    Delphi是一种流行的面向对象的 Pascal 编程语言,它提供了丰富的库和工具来创建Windows桌面应用程序。JavaScript则广泛用于Web开发,为浏览器中的动态功能提供动力。当需要在Delphi应用中嵌入Web组件或与Web服务通信...

    精心收集的WEB开发常用JS代码大全

    4. **面向对象编程**:JS支持基于原型的面向对象编程,包括构造函数、原型链和实例化对象。这部分代码可能展示了如何定义和使用自定义对象。 5. **事件处理**:JS通过事件处理程序可以监听并响应用户的键盘、鼠标等...

    Javascript 完全手册(PDF)

    1. **基础概念**:JavaScript是一种解释型的、弱类型的、基于原型的语言,支持面向对象、函数式和命令式编程风格。它与Java名字相似,但两者完全不同,JavaScript主要用于客户端的网页交互,而Java则更多用于服务器...

    Professional JavaScript for Web Developers

    11. **错误处理**:学会如何有效地处理和报告JavaScript中的错误,包括try...catch语句、自定义错误对象和异常处理。 12. **浏览器兼容性**:了解不同浏览器对JavaScript特性的支持情况,以及如何使用polyfill或...

    js实例说明和详解

    通过这些实例,开发者可以学习到如何有效地创建和使用自定义类,掌握面向对象编程的基础,以及如何利用构造函数、原型链、继承等概念。 例如,可能会有一个关于Function类的实例,展示如何动态创建函数,或者关于...

    JavaScript

    Java是一种面向对象的编程语言,需要编译成字节码后在虚拟机上运行,而JavaScript则是一种解释型语言,不需要编译,直接由浏览器解释执行。Java采用强类型变量检查,而JavaScript使用弱类型变量。此外,Java代码通常...

    JavaScript权威指南(第6版)中文版

    4. **对象与原型链**:JavaScript的面向对象特性基于原型,书中详细解析了对象创建、属性访问、原型对象、构造函数和`new`操作符的工作原理,以及如何通过原型链实现继承。 5. **错误处理**:书中讨论了JavaScript...

    《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案.doc

    【Java面向对象编程基础】 ...这些知识点涵盖了Java语言的基础语法、面向对象特性、异常处理、GUI编程、线程和数据类型的使用,是学习Java编程的基础内容。了解并掌握这些知识点对于理解和编写Java程序至关重要。

Global site tag (gtag.js) - Google Analytics