2017-04-25 53 views
0

這是一個簡單的時鐘應用程序的JS。 在JS中,'with'語句不再使用。 我想幫助理解如何保留功能,同時刪除'with'語句的使用。謝謝。這個JavaScript將被重構以刪除'with'語句

function moveHands() { 
    with (new Date()) { 
    h = 30 * (getHours() % 12 + getMinutes()/60); // 30 degrees for each hour 
    m = 6 * (getMinutes()); // 6 degrees each minute 
    s = 6 * (getSeconds()); 
    // now rotate the clock via changing css 

    document.getElementById('hours').style.cssText = "-webkit-transform:rotate(" + h + "deg);"; 
    document.getElementById('minutes').style.cssText = "-webkit-transform:rotate(" + m + "deg);"; 
    document.getElementById('seconds').style.cssText = "-webkit-transform:rotate(" + s + "deg);"; 

    setTimeout(moveHands, 1000); 
    } 
} 
window.onload = moveHands; 
+5

'變種d =新的日期();''..... d.getHours()'....等 –

+0

*帶*號不會被棄用,這是在[* ECMA的當前版本-262 *](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-with-statement)。 – RobG

回答

2

MDN with documentation

與不推薦使用,而在5的ECMAScript嚴格 模式是被禁止的。建議的替代方法是將您想要訪問的對象的對象分配給臨時變量。

基本上,這意味着你必須在使用它之前將對象賦值給一個變量,這非常標準。 所以你的情況,你的代碼應該是這樣的:

function moveHands() { 
    var date = new Date(); 
    h = 30 * (date.getHours() % 12 + date.getMinutes()/60); // 30 degrees for each hour 
    m = 6 * (date.getMinutes()); // 6 degrees each minute 
    s = 6 * (date.getSeconds()); 
    // now rotate the clock via changing css 

    document.getElementById('hours').style.cssText = "-webkit-transform:rotate(" + h + "deg);"; 
    document.getElementById('minutes').style.cssText = "-webkit-transform:rotate(" + m + "deg);"; 
    document.getElementById('seconds').style.cssText = "-webkit-transform:rotate(" + s + "deg);"; 

    setTimeout(moveHands, 1000); 

} 

window.onload = moveHands; 
+0

'從MDN與文檔' - 我會說OP是完全知道這一點:p –

+0

謝謝!簡單的修復,但確切需要什麼。 – user1486510

2

日期只是分配給一個變量,則顯式調用該變量的日期的方法。

function moveHands() { 
    var currentDate = new Date(); 

    h = 30 * (currentDate.getHours() % 12 + currentDate.getMinutes()/60); // 30 degrees for each hour 
    m = 6 * (currentDate.getMinutes()); // 6 degrees each minute 
    s = 6 * (currentDate.getSeconds()); 
    // now rotate the clock via changing css 

    document.getElementById('hours').style.cssText = "-webkit-transform:rotate(" + h + "deg);"; 
    document.getElementById('minutes').style.cssText = "-webkit-transform:rotate(" + m + "deg);"; 
    document.getElementById('seconds').style.cssText = "-webkit-transform:rotate(" + s + "deg);"; 

    setTimeout(moveHands, 1000); 
} 
window.onload = moveHands; 
0

我只是使用局部變量。

function moveHands() { 
    var date = new Date(); 
    h = 30 * (date.getHours() % 12 + date.getMinutes()/60); // 30 degrees for each hour 
    m = 6 * (date.getMinutes()); // 6 degrees each minute 
    s = 6 * (date.getSeconds()); 
    // now rotate the clock via changing css 

    document.getElementById('hours').style.cssText = "-webkit-transform:rotate(" + h + "deg);"; 
    document.getElementById('minutes').style.cssText = "-webkit-transform:rotate(" + m + "deg);"; 
    document.getElementById('seconds').style.cssText = "-webkit-transform:rotate(" + s + "deg);"; 

    setTimeout(moveHands, 1000); 
} 
window.onload = moveHands; 
+0

這種方法解決了這個問題。小心,因爲你的代碼作爲局部變量在「日期」和「數據」之間切換,但我明白你的觀點。感謝您的幫助。 – user1486510

+0

@ user1486510感謝您指出。我總是犯這個錯字:(我結束了這個帖子。 –