Я ошибаюсь, что .prototype
должен делать, или это просто не работает ??
window.dump = function () {
for (var i = 0, x = dump.list.length; i < x; ++i) console.log.apply(this, dump.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) dump.purge();
}
dump.prototype = {
list : [],
log : function () {
dump.list.push(arguments);
},
purge : function () {
dump.list = [];
}
}
dump.log('test1');
dump.log('test2');
dump();
Я ожидаю, что "test1" и "test2" будут проходить через console.log
, вместо этогоdump.log
не определено.Однако dump.prototype.log
is.
edit: я попробовал следующее, и я просто не могу понять, как работает этот прототип.
window.dump = new function () {
this.list = [];
this.log = function () {
this.list.push(arguments);
}
this.purge = function () {
return this.list = [];
}
return function () {
for (var i = 0, x = this.list.length; i < x; ++i) console.log.apply(this, this.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) this.purge();
}
}
Я думаю, что яСпрашивается, как правильно использовать мой код следующим образом?
dump.log('test1');
dump.log('test2');
dump();
edit: Вот окончательный результат, спасибо Мэтью Флешену, за всех, кто заинтересован в его построении.
(function () {
var console_log = Function.prototype.bind.call(console.log, console);
window.dump = function () {
for (var i = 0, x = dump.list.length; i < x; ++i) console_log.apply(this, dump.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) dump.purge();
};
dump.list = [];
dump.log = function () {
dump.list.push(arguments);
}
dump.purge = function () {
dump.list = [];
}
})();
Мне пришлось присвоить console_log
для переноса console.log
, потому что, очевидно, console
не является стандартным объектом.Поэтому это не стандартный объект Function
с методом apply
.Доказательство того, что я действительно использую Google.