JavaScript-创建日志调试对象(面向对象实例)
参考自http://www.2cto.com/kf/201312/261990.html
IC.js文件 自己封装的js类库
- /**
- *
- * @authors Your Name (you@example.org)
- * @date 2017-07-18 15:51:06
- * @version $Id$
- */
- if(document.all&&!document.getElementById()){
- document.getElementById = function(id){
- return document.all[id];
- }
- };
- if(!String.repeat){
- String.prototype.repeat = function(){
- return new Array(i+1).join(this);
- }
- };
- if(!String.trim){
- String.prototype.trim = function(){
- return this.replace(/^\s+|\s+$/g,'');
- }
- };
- (function(){
- /*创建自己的库,名称为IC*/
- if (!window['IC']) {
- window['IC'] = {};
- }
- function $() {
- /*alert()是JavaScript脚本语言中窗口window对象的一个常用方法;
- 其主要用法就是在你自己定义了一定的函数以后,通过执行相应的操作,
- 所弹出对话框的语言。并且alert对话框通常用于一些对用户的提示信息。*/
- var elements = new Array();
- /*Arguments对象能够模拟重载*/
- for(var i=0;i<arguments.length;i++){
- var element = arguments[i];
- if(typeof element == 'string'){
- element = document.getElementById(element);
- }
- if(arguments.length==1){
- return element;
- }
- elements.push(element);
- }
- return element;
- }
- //把$函数注册到 'myNameSpace'命名空间中
- window['IC']['$'] = $;
- /*向Node节点对象添加事件,(后面讲)*/
- function addEvent(node,type,listener){
- if(!(node=$(node))){
- return false
- };
- if(node.addEventListener){
- node.addEventListener(type,listener,false)
- return true
- }else if( node.attachEvent){
- node['e'+type+listener] = listener;
- node[type+listener] = function (){node['e'+type+listener](window.event);};
- node.attachEvent('on'+type,node[type+listener]);
- return true;
- }
- return false;
- };
- window['IC']['addEvent'] = addEvent;
- /*获取所有指定类名的元素:(所有类型元素,参数1类名,参数2标签名)*/
- /*获取所有指定类名的元素:(所有类型元素,参数1类名,参数2标签名)*/
- function getElementsByClassName(className,tag,parent){
- parent = parent || document;
- if(!(parent = $([parent]))) return false;
- var allTags = (tag == '*' && parent.all)? parent.all : parent.getElementsByTagName(tag);
- var matchingElements = new Array();
- className = className.replace(/\-/g,'\\-');
- var regex = new RegExp("(^|\\s)"+className+"(\\s|$)");
- var element;
- for(var i=0;i<allTags.length;i++){
- element = allTags[i];
- if(regex.test(element.className)){
- matchingElements.push(element)
- }
- }
- return matchingElements;
- }
- window['IC']['getElementsByClassName' ] = getElementsByClassName;
- function bindFunction(obj,func){
- return function(){
- /*将方法绑定到对象上*/
- func.apply(obj,arguments);
- }
- }
- window['IC']['bindFunction'] = bindFunction;
- function getBrowserWindowSize(){
- var de = document.documentElement;
- return {
- 'width' :(
- window.innerWidth
- || (de &&de.chileWidth)
- || document.body.clientWidth),
- 'height' :(
- window.innerHeight
- || (de &&de.clientHeight)
- ||document.body.clientHeight)
- }
- };
- window['IC']['getBrowserWindowSize'] = getBrowserWindowSize;
- })();
test.js
作用:向window对象里面添加一个load事件。
- /**
- *
- * @authors Your Name (you@example.org)
- * @date 2017-07-20 11:15:35
- * @version $Id$
- */
- /* test.js中代码的主要作用是向window对象里面添加一个load事件。*/
- IC.addEvent(window,'load',function(){
- IC.log.writeRaw('This is Raw');
- IC.log.writeRaw('<strong>This is bold</strong>');
- IC.log.header('With a header');
- //遍历整个 document
- for(i in document){
- IC.log.write(i);
- };
- })
mylog.js
涉及到 myLogger函数,此函数还包含构造函数,createWindow函数,writeRaw函数。这些函数将在test.js文件中的到验证
- /**
- *
- * @authors Your Name (you@example.org)
- * @date 2017-07-20 10:10:13
- * @version $Id$
- */
- function myLogger(id){
- id = id || 'ICLogWindow';
- // 日志窗体的引用
- var logWindow = null;
- //创建日志窗体
- var createWindow = function(){
- //引用节点
- var browserWindowSize = IC.getBrowserWindowSize();
- var top = (browserWindowSize.height-200)/2||0;//=>如果为空则为0
- var left = (browserWindowSize.width-200)/2||0;//=>如果为空则为0
- /*使用UL*/
- logWindow = document.createElement('UL');//=>在页面内创建UL的元素
- /*添加ID进行标识*/
- /*setAttribute() 方法添加指定的属性,并为其赋指定的值。*/
- logWindow.setAttribute('id',id);
- /*对窗体进行样式控制*/
- logWindow.style.position = 'absolute';
- logWindow.style.top = top+'px';
- logWindow.style.left = left+'px';
- logWindow.style.width = '200px';
- logWindow.style.height = '200px';
- logWindow.style.overflow = 'scroll';
- logWindow.style.padding = '0';
- logWindow.style.margin = '0';
- logWindow.style.border = '1px solid #000';
- logWindow.style.backrgoundColor = '#fff';
- logWindow.style.listStyle = 'none';
- logWindow.style.fontSize = '12px';
- document.body.appendChild(logWindow);
- };
- //向窗体添加一行
- //声明特权方法,向日志文件中添加一条记录另一种写法是 myLogger.pro
- this.writeRaw = function(message){//=>特权方法和全局方法作用相同
- //如果初始窗体是不存在的,则生成日志窗体
- if(!logWindow){
- createWindow();
- }
- /*创建Li节点实例*/
- var li = document.createElement('LI');
- //进行CSS样式控制
- li.style.padding = '0';
- li.style.margin = '0';
- li.style.border = '1px solid #ccc';
- li.style.backrgoundColor = '#fff';
- li.style.listStyle = 'none';
- li.style.fontSize = '12px';
- /*验证message信息*/
- if(typeof message == undefined){
- li.appendChild(document.createTextNode('Message is undefined'));
- }else if(typeof li.innerHTML!= undefined){
- li.innerHTML = message;
- }else {
- li.appendChild(document.createTextNode(message))
- }
- logWindow.appendChild(li);
- return true;
- }
- };
- //使用对象自变量的方式声明特权方法
- myLogger.prototype = {
- //=>向窗体添加一行,并进行简单处理
- write : function(message){
- if(typeof message == 'string'&& message.length == 0){
- return this.writeRaw('没有输入信息')
- }
- if(typeof message!='string'){
- if(message.toString){
- return this.writeRaw(message.toString());
- }else {
- return this.writeRaw(typeof message);
- }
- };
- //将大于号小于号进行正则转换成HTML标记
- message = message.replace(/</g,"<").replace(/>/g,">");
- return this.writeRaw(message);
- },
- //=>向窗体添加标题
- header : function(message){
- message = '<span style="color:#000;background-color: #f4f4f4;font-weight: bold;padding:0px 5px;">'+message+'</span>'
- return this.writeRaw(message);
- }
- };
- window['IC']['log'] = new myLogger();
html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <title>实例</title>
- <meta name="description" content="">
- <meta name="keywords" content="">
- <script type="text/javascript" src='IC.js'></script>
- <script type="text/javascript" src='mylog.js'></script>
- <script type="text/javascript" src=' test.js'></script>
- </head>
- <body>
- 实例参考地址
- http://www.2cto.com/kf/201312/261990.html
- </body>
- </html>
JavaScript-创建日志调试对象(面向对象实例)的更多相关文章
- Javascript创建类和对象
现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...
- Javascript 构造函数、原型对象、实例之间的关系
# Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对 ...
- 5.Javascript 原型链之原型对象、实例和构造函数三者之间的关系
前言:用了这么久js,对于它的原型链一直有种模糊的不确切感,很不爽,隧解析之. 本文主要解决的问题有以下三个: (1)constructor 和 prototype 以及实例之间啥关系? (2)pro ...
- JavaScript创建日志文件并记录时间的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 try { var WSShell = WScript.CreateObject("WScript.Shel ...
- Javascript 原型链之原型对象、实例和构造函数三者之间的关系
前言:用了这么久js,对于它的原型链一直有种模糊的不确切感,很不爽,隧解析之. 本文主要解决的问题有以下三个: (1)constructor 和 prototype 以及实例之间啥关系? (2)pro ...
- javascript创建一个基于对象的栈结构
上篇博客介绍了基于数组创建一个栈,这是用对象创建一个栈 s1.声明一个Stack类 class Stack { constructor() { this.count = 0; this.items = ...
- Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)
概念: ...
- 2014年辛星完全解读Javascript第六节 对象
随着面向对象的普及,现在很多语言都在支持面向对象,Javascript也不例外,所谓对象,就是拥有属性和方法的数据.这里的属性其实就是变量,这里的方法,其实就是函数.但是Javascript的面向对象 ...
- 理解类、对象、实例、原型链以及继承 - WPF特工队内部资料
理解类.对象.实例.原型链以及继承 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
随机推荐
- asp.net core系列 24 EF模型配置(主键,生成值,最大长度,并发标记)
一.主键 键用作每个实体实例的主要唯一标识符. 使用关系数据库时,这会映射到主键的概念. 还可以配置不是主键的唯一标识符.按照约定,名为 Id 或 <type name>Id 的属性会配置 ...
- 如何用sysbench做好IO性能测试
sysbench 是一个非常经典的综合性能测试工具,通常都用它来做数据库的性能压测,但也可以用来做CPU,IO的性能测试.而对于IO测试,不是很推荐sysbench,倒不是说它有错误,工具本身没有任何 ...
- Html5 localStorage 缓存
1.客户端页面临时存贮数据变化多段,cookie ,session, data-xxx , hidden input 这些司空见惯不废话,我们采用 localStorage 特点:1.数据不会删除,除 ...
- response.redirect 与location.href 的区别
最近做项目时发现,先弹出提示框,再跳转页面 这样写:Jscript.Alert("你好,Hello!"); Response.Redirect("/index.aspx& ...
- Mysql is null 索引
看到很多网上谈优化mysql的文章,发现很多在谈到mysql的null是不走索引的,在此我觉得很有必要纠正下这类结论.mysql is null是有索引的,而且是很高效的,(版本:mysql5.5)表 ...
- 5-Redis 的持久化之 RDB
2016-12-22 13:58:48 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...
- JavaScript splice() 方法和JavaScript split() 方法
定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法 arrayObject.splice(index,howmany,item1, ...
- 【代码笔记】Web-CSS-CSS Display
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 在虚拟机中搭建qduoj(二)——安装OJ
在上一章中,我们已经做好了准备工作,现在,正式开始搭建OJ. 可以先看看官方文档: https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0 运行p ...
- 【AO笔记】Addins的Toolbar 添加一条分割线
在XAML中,给Item标签添加separator属性,需要从哪里打分割线,就将其设置为true即可.如下图所示: 如紫色框住的灰色竖线所示. 默认separator属性是false的,这个小东西极其 ...