2017-04-25 24 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感谢您指出。我总是犯这个错字:(我结束了这个帖子。 –