Передайте аргументы в консоль.войти в качестве аргументов первого класса через прокси-функцию
console.log
принимает неопределенное количество аргументов и выводит их содержимое в одну строку.
есть ли способ я могу написать функцию, которая передает аргументы, переданные ему непосредственно console.log
поддерживать такое поведение? Например:
function log(){
if(console){
/* code here */
}
}
это будет не то же самое, что:
function log(){
if(console){
console.log(arguments);
}
}
С arguments
- это массив и console.log
сбросит содержимое этого массива. И это будет не то же самое, что:
function log(){
if(console){
for(i=0;i<arguments.length;console.log(arguments[i]),i++);
}
}
так как это будет распечатайте все в разных строках. Дело в том, чтобы поддерживать console.log
поведение, но через прокси-функцию log
.
+ - - -
я искал решение, которое я мог бы применить ко всем функциям в будущем (создать прокси для функции, сохраняя обработку аргументов нетронутыми). Если это не может быть сделано, однако, я приму console.log
конкретный ответ.
3 ответа:
это должно помочь ..
function log() { if(typeof(console) !== 'undefined') { console.log.apply(console, arguments); } }
просто добавив еще один вариант (С помощью распространение оператора и остальное параметры - хотя
arguments
может использоваться непосредственно со спредом)function log(...args) { if(typeof(console) !== 'undefined') { console.log(...args); } }
есть хороший пример из кода html5boilerplate, который обертывает консоль.войдите аналогичным образом, чтобы убедиться, что вы не нарушаете работу браузеров, которые его не распознают. Он также добавляет историю и сглаживает любые различия в консоли.реализация журнала.
Он был разработан полом Айришем, и он написал сообщение об этом здесь.
я вставил соответствующий код ниже, вот ссылка на файл в проекте: https://github.com/h5bp/html5-boilerplate/blob/master/js/plugins.js
// usage: log('inside coolFunc', this, arguments); // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/ window.log = function(){ log.history = log.history || []; // store logs to an array for reference log.history.push(arguments); if(this.console) { arguments.callee = arguments.callee.caller; var newarr = [].slice.call(arguments); (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr)); } }; // make it safe to use console.log always (function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}}((function(){try {console.log();return window.console;}catch(err){return window.console={};}})());