`
jobar
  • 浏览: 340928 次
  • 性别: 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
分享到:
评论

相关推荐

    JavaScript前端开发的核心语言前端开发的核心语言

    JavaScript也是一种面向对象的语言。它支持对象、类、继承、多态等面向对象编程的概念,使得代码结构更加清晰和可维护。开发者可以创建自定义的对象和方法,对功能进行封装和复用,提高代码的可读性和可维护性。

    JavaScript王者归来part.1 总数2

     13.2.1 事件和事件类型   13.2.2 事件的绑定   13.2.3 直接调用事件处理函数   13.2.4 事件处理函数的返回值   13.2.5 带参数的事件响应及其例子   13.2.6 “this”关键字   13.3 标准事件模型   ...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰...

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    第4章 JavaScript面向对象编程和类型反射扩展 4.1 JavaScript函数 4.2 JavaScript类 4.3 Type 4.4 registerClass 4.5 getName 4.6 isClass 4.7 registerNamespace 4.8 isNamespace 4.9 registerInterface 4.10 ...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰...

    (全)传智播客PHP就业班视频完整课程

    9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 编?绦Q閤ml 9-5 3.php xml编程③-内部dtd 外边dtd dtd元素 dtd修饰...

    Java语言基础下载

    自定义异常 126 方法覆盖和异常 127 内容总结 129 第九章:基于文本的应用 131 学习目标 131 程序交互的几种方式 132 常用类方法说明 132 String的方法 132 正则表示式(Regular expression) 133 StringBuffer类 ...

    达内java培训目录

    JavaScript核心 JavaScript语言基础(数据类型、函数、对象、闭包)、Java DOM编程、事件模型、JavaScript面向对象编程。 深入理解JavaScript语言原理;熟练的使用JavaScript对HTML DOM进行编程;熟练掌握...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 面向对象概念总结 06 反射 07 反射及动态导入模块 08 类的内置attr属性 09 类内置attr属性补充 10 继承的方式完成包装 11 组合的方式完成授权 第27章 01 os模块复习 02 上节课复习 03 内置函数补充及...

    GalactronJS:Galactron 游戏的 Javascript 版本

    这个项目中的大部分自定义 JavaScript 代码都是用 ES6 编写的。 不要对类语法和 ES6 语法感到奇怪,它主要是语法糖,最终会转换为“常规”JS。 它使用转译器自动转换为浏览器就绪的 ES5。 Grunt 任务会在服务器...

    PHP和MySQL Web开发第4版pdf以及源码

    7.3 用户自定义异常 7.4 Bob的汽车零部件商店应用程序的异常 7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 ...

    PHP和MySQL WEB开发(第4版)

    7.3 用户自定义异常 7.4 Bob的汽车零部件商店应用程序的异常 7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 ...

    ActionScript开发技术大全

    8.4.3自定义异常类型 166 8.5小结 167 第3篇ActionScript3.0可视化编程 第9章可视化编程基础 170 9.1可视化编程模型 170 9.1.1可视化编程概述 170 9.1.2可视对象 172 9.1.3可视对象列表 175 9.1.4可视对象管理函数 ...

Global site tag (gtag.js) - Google Analytics