Javascript
http://eto.com/d/0503.html#JavaScript_Programming
Javascriptのプログラミングについて
http://homepage1.nifty.com/kuraman/js/debug.html
デバッグツール。
ちょこっと手直しを入れてみた。
// ****************************** debug.js // original from http://homepage1.nifty.com/kuraman/js/debug.html // modified by Kouichirou Eto // modified by Kazunobu Ichihashi // print(variable): variableの内容を出力バッファに保存 // flush(): 出力バッファの内容をデバッグウィンドウに出力 // clear(): 出力バッファの内容をクリア // setDebug(true | false): デバッグ情報を出力する(true)か出力しない(false)かを設定 // inspect(obj): オブジェクトの内容をわかりやすい文字列にする // p(obj): inspectした結果を表示する var debug = new debug(); function debug() { // プロパティ //////////////////////////////////////////////////// this.html = ""; // 出力するデバッグ情報のバッファ this.hWin = null; // デバッグ情報を表示するウィンドウのハンドル this.bDebug = true; // デバッグするかどうかのフラグ this.color = ""; // メソッド ////////////////////////////////////////////////////// /** * デバッグを出力するかどうか * * @param flag boolean true:デバッグする | false:デバッグしない */ this.setDebug = function(flag) { this.bDebug = flag; } /** * デバッグ情報の出力バッファをクリアする */ this.clear = function() { this.html = ""; this.flush(); } /** * デバッグ情報をデバッグウィンドウに出力する */ this.flush = function() { if (false == this.bDebug) return; if (null == this.hWin || this.hWin.closed) { this.hWin = window.open("", "debug", "height=200,width=400,menubar=yes,scrollbars=yes,resizable=yes"); } this.hWin.document.open("text/html", "replace"); this.hWin.document.write(this.html); this.hWin.document.close(); this.hWin.focus(); } /** * デバッグ情報をバッファに追加する * * @param html string デバッグする変数 */ this.print = function(html) { this.color = (this.color == "#FAF5D4") ? "#EBCC67" : "#FAF5D4"; this.html += ("<div style='background-color:"+this.color+"'>" + this.htmlchar(html) + "</div>\n"); } /** * オブジェクトの内容を文字列にする * * @param obj オブジェクト */ this.inspect = function(obj) { if (typeof obj == "number") { // 数値の場合 return ""+obj; } else if (typeof obj == "string") { // 文字列の場合 return "\""+obj+"\""; } else if (typeof obj == "function") { // 関数の場合 return ""+obj; } else if (typeof obj == "object") { // オブジェクトの場合 var str = this.to_s(obj, ""); return "{"+str+"}"; } else { // 上記以外の場合 return "<"+(typeof obj)+":"+obj+">"; } } /** * オブジェクトの内容を文字列にする * * @param obj オブジェクト */ this.to_s = function(obj, indent){ var delimiter = ", \n"; // 区切り文字 var str = ""; for (key in obj) { // 区切り文字 if (str != "") str += delimiter; str += indent; var value = obj[key]; if (!value) { // キーがあるが値がない場合 str += ""+key+"=>undefined"; continue; } if (typeof value == "number") { // 数値の場合( key=>value ) str += ""+key+"=>"+value+""; } else if (typeof value == "string") { // 文字列の場合( key=>"value" ) str += ""+key+'=>"'+value+'"'; } else if (typeof value == "function") { // 関数の場合( key() ) str += ""+key+"()"; } else if (typeof value == "object") { // オブジェクトの場合( key=>value ) value = "\n" + this.to_s(value, indent+" "); str += ""+key+"=>"+value+""; } else { // 上記以外の場合( key=><type:value> ) str += ""+key+"=><"+(typeof value)+":"+value+">"; } } if (str == ""){ // オブジェクトにプロパティがない場合はそのまま表示 str += ""+obj; } return str; } this.htmlchar = function(str){ // 順番が重要! str = str.replace(/&/g, "&"); str = str.replace(/</g, "<"); str = str.replace(/>/g, ">"); str = str.replace(/\"/g, """); str = str.replace(/\n/g, "<br>\n"); return str; } /** * オブジェクトの内容を文字列にして表示する * * @param elem object オブジェクト */ this.p = function(elem) { this.print(this.inspect(elem)); this.flush(); } }