JavaScript のスキルを向上させるために、jQuery のソース コードを学習して理解しようとしていました (これまでのところ、ほとんど成功していません X_X)。JavaScript の理解が深まるにつれ、この小さなロギング/デバッグ ツールを思いつきました。JavaScript の私のレベルでは、人々が判断して監査できるように、ここにコードを投稿しています。したがって、コメントから学ぶことができる可能性があります。誰かが潜在的な問題、改善点を指摘できますか? コンソールの実装をカプセル化し、window.$console (グローバル スコープを台無しにする唯一の場所) にマップしようとしました。
(function() {
var proxy = {}, //use private proxy object to prevent binding to global (window) object
_id = "",
_warning = false;
results = {};
if (this.$console) { //check if $console exists in global (window)
warning("$console is conflicting with existing object and could not be mapped.");
}
else {
this.$console = proxy; //if undefined we then map proxy to global (window) object
}
proxy.init = function(id) { //map the display ol html element on the page
_id = id;
results = document.getElementById(id);
return this;
}
proxy.log = function(msg) {
append(msg);
return this;
};
proxy.assert = function(pass, msg) {
var html = (pass) ? "<b style=\"color: green;\">Pass</b>, " + msg
: "<b style=\"color: red;\">Fail</b>, " + msg ;
append(html);
return this;
}
proxy.error = function(msg) {
var html = "<b style=\"color: red;\">Error</b>, " + msg + "";
append(html);
return this;
}
function append(msg) {
if (results != null) {
results.appendChild(getChild("li", msg));
}
else {
warning("Message could not be appended to element with \"Id: " + _id + "\".");
}
return this;
};
function getChild(type, html) {
var child = document.createElement(type);
child.innerHTML = html;
return child;
}
function warning(msg) {
if (!_warning) {
_warning = true;
alert(msg);
}
}
return proxy;
}());
使用法
$console.init("console").log("hello world");
$console.assert(true, "This is a pass.");
ps: コードにいくつかの修正を加えたため、質問は元のものとはかなり異なります。