这是我用来调试的。没有全局变量,没有 eval,没有 arguments.callee 或 arguments.caller:
var Helpers = (function () {
// ECMAScript 5 strict mode
'use strict';
var Module = {};
Module.debug = function () {
var i;
for (i = 0; i < arguments.length; i++) {
console.log(arguments[i] + ':', this[arguments[i]]);
}
};
Module.SomeObject = function SomeObject() {
this.someMember = 1;
this.anotherMember = 'Whatever';
Module.debug.call(this, 'someMember', 'anotherMember');
var privateMember = {
name: 'Rip Steakface',
battleCry: 'Raaaaaaaaahhhhhhhhhrrrrrrrrrg!'
};
Module.debug.call(privateMember, 'name', 'battleCry');
};
return Module;
}());
对于那些想知道为什么要这样做的人来说,这只是一种有效地记录多个变量及其名称的方法。
如果您希望能够记录嵌套成员,如Module.debug.call(obj, 'hair.fluffiness')
,您可以像这样修改函数:
Module.debug = function () {
var i, j, props, tmp;
for (i = 0; i < arguments.length; i++) {
tmp = this;
props = arguments[i].split('.');
for (j = 0; j < props.length; j++) {
tmp = tmp[props[j]];
}
console.log(arguments[i] + ':', tmp);
}
};
不幸的是,我找不到任何方法来有效地记录不是对象成员的多个私有变量,例如 var roll = 3, value = 4; Module.debug.call(???);