2015-04-10 3 views
0

Я положил свой код Javascript через анализатор и сказал, чтобы он не использовал with (Math). Я не могу найти альтернативный способ сделать эту работу. Есть идеи? Код делает как обычные часы, так и восьмеричные часы. Я отправлю код прямо сейчас:Альтернатива с математикой В Javascript

var oct = ["0", "1", "2", "3", "4", "5", "6", "7"]; 
var c; 
var now; 
var day; 
var month; 
var year; 
var octtime; 
var oct1; 
var oct2; 
var oct3; 
var oct4; 
var oct5; 
var oct6; 
var octvalue; 
var point = "."; 
function a() { 
    c = checkTime; 
    now = new Date(); 
    day = now.getDate(); 
    month = now.getMonth(); 
    year = now.getFullYear(); 
    var hours = now.getHours(); 
    var minutes = now.getMinutes(); 
    var seconds = now.getSeconds(); 
    var totsecs = hours * 3600; 
    totsecs += minutes * 60; 
    totsecs += seconds; 
    totsecs += (now.getTime() % 1000)/1000; 
    hours = c(hours); 
    minutes = c(minutes); 
    seconds = c(seconds); 
    with (Math) { 
    octtime = floor(totsecs/(86400/262144)) 
    oct1 = floor(octtime/32768) 
    octtime -= 32768 * oct1 
    oct2 = floor(octtime/4096) 
    octtime -= 4096 * oct2 
    oct3 = floor(octtime/512) 
    octtime -= 512 * oct3 
    oct4 = floor(octtime/64) 
    octtime -= 64 * oct4 
    oct5 = floor(octtime/8) 
    octtime -= 8 * oct5 
    oct6 = octtime 
    } 
    octvalue = point + oct[oct1] + oct[oct2] + oct[oct3] + oct[oct4] + oct[oct5] + oct[oct6] 
    document.getElementById('a').innerHTML=hours+":"+minutes+":"+seconds; 
    document.getElementById('b').innerHTML = octvalue 
    timerID = setTimeout("a()") 
    function checkTime(i) 
    { 
    if (i<10) 
    { 
     i="0" + i; 
    } 
    return i; 
    } 
} 
window.onload = a; 
+4

Ваш код напугал меня ... – DontVoteMeDown

+0

Выглядит очень похоже на домашнее задание, который предназначен, чтобы научить, как сделать алгоритм настила/функция – Nenotlep

ответ

5

Просто префикс весь ваш вызов floor с Math.

Изменить

with (Math) { 
octtime = floor(totsecs/(86400/262144)) 

в

octtime = Math.floor(totsecs/(86400/262144)) 

И да, вы должны удалить эти with, анализатор кода является правильным. Это плохая практика, незаконна в строгом коде и предотвращает оптимизацию функций движком JavaScript. См. the MDN on with.

Обратите внимание, что есть детали, требующие рефакторинга в вашем коде. Например, если у вас есть переменные с именем oct1 ... oct8, вероятно, вы можете сделать это проще и сушилкой с массивом. Ваши переменные также не должны быть глобальными, вы можете и должны определять некоторые переменные в объеме функции.

Если вам сложно заниматься форматированием времени, возможно, вам стоит взглянуть на библиотеку, такую ​​как moment.js.

И, конечно же, правильно отступом код легче читать и поддерживать ...

Смежные вопросы