js32---CommonUtil.js

简介:
// BH 命名空间  namespace
var BH = {} ;

BH.Interface = function(name,methods){  //Interface是类、方法的名字,以后用BH.Interface表示名字。new BH.Interface('CarInterface' ,['start','run']);当类用
    //判断接口的参数个数
    if(arguments.length != 2){
        throw new Error('this instance interface constructor arguments must be 2 length!');
    }
    this.name = name ; 
    this.methods = [] ; //定义一个内置的空数组对象 等待接受methods里的元素(方法名字)
    for(var i = 0,len = methods.length ; i <len ; i++){
         if( typeof methods[i] !== 'string'){
                 throw new Error('the Interface method name is error!');
         }
         this.methods.push(methods[i]);
    }
}


// 三:检验接口里的方法
BH.Interface.ensureImplements = function(object){
    // 如果检测方法接受的参数小于2个 参数传递失败!
    if(arguments.length < 2 ){
        throw new Error('Interface.ensureImplements method constructor arguments must be  >= 2!');
    }
    
    // 获得接口实例对象 
    for(var i = 1 , len = arguments.length; i<len; i++ ){
        var instanceInterface = arguments[i];
        // 判断参数是否是接口类的类型
        if(instanceInterface.constructor !== BH.Interface){
            throw new Error('the arguments constructor not be Interface Class');
        }
        // 循环接口实例对象里面的每一个方法
        for(var j = 0 ; j < instanceInterface.methods.length; j++){
            // 用一个临时变量 接受每一个方法的名字(注意是字符串)
            var methodName = instanceInterface.methods[j];
            // object[key] 就是方法
            if( !object[methodName] || typeof object[methodName] !== 'function' ){
                throw new Error("the method name '" + methodName + "' is not found !");
            }
        }
    }
};

BH.extend=function(sub ,sup){
     var F = new Function();    // 1 创建一个空函数    目的:空函数进行中转
     F.prototype = sup.prototype; // 2 实现空函数的原型对象和超类的原型对象转换
     sub.prototype = new F();     // 3 原型继承 
     sub.prototype.constructor = sub ; // 4还原子类的构造器
     //保存一下父类的原型对象: 一方面方便解耦  另一方面方便获得父类的原型对象
     sub.superClass = sup.prototype; //自定义一个子类的静态属性 接受父类的原型对象
     //判断父类的原型对象的构造器 (加保险)
     if(sup.prototype.constructor == Object.prototype.constructor){
         sup.prototype.constructor = sup ; //手动欢迎父类原型对象的构造器
     }
};


/**
 * 单体模式
 * 实现一个跨浏览器的事件处理程序。一个冒泡事件一个捕获事件。
 */
BH.EventUtil = {
    addHandler:function(element , type , handler){
        if(element.addEventListener){        //FF
            element.addEventListener(type,handler,false);//false表示冒泡
        } else if(element.attachEvent){        //IE
            element.attachEvent('on'+type , handler);
        }
    } , 
    removeHandler:function(element , type , handler){
        if(element.removeEventListener){        //FF
            element.removeEventListener(type,handler,false);
        } else if(element.detachEvent){        //IE
            element.detachEvent('on'+type , handler);
        }        
    }
};


Array.prototype.each = function(fn){
    try{
        this.i || (this.i=0);  //var i = 0 ;
        if(this.length >0 && fn.constructor == Function){
            while(this.i < this.length){    //while循环的范围 
                var e = this[this.i];
                if(e && e.constructor == Array){
                    e.each(fn);
                } else {
                    //fn.apply(e,[e]);
                    fn.call(e,e);
                }
                this.i++ ;
            }
            this.i = null ; // 释放内存 垃圾回收机制回收变量
        }
    } catch(ex){
        // do something 
    }
    return this ;
}
复制代码

 



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6886881.html,如需转载请自行联系原作者
相关文章
|
负载均衡 中间件 API
Asp.Net Core API网关Ocelot
首先,让我们简单了解下什么是API网关?       API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。
2758 0
|
1天前
|
人工智能 运维 安全
|
3天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
371 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
581 107
|
2天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
193 127
|
2天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
222 124
|
2天前
|
人工智能 数据可视化 测试技术
Coze平台指南(3):核心功能-创建智能体与设计角色
Coze 智能体是由大语言模型驱动,通过提示词设定角色,并借助知识库、插件和工作流扩展能力,以执行特定任务的AI助手。对测试工程师而言,精心设计的智能体可显著提升测试效率与质量,关键是要准确理解测试需求,并将其转化为智能体的角色设定和功能配置。建议进一步学习知识库与工作流,以深化应用。

热门文章

最新文章