与网上广为流传的特权方法有所不同,这里是使用闭包来实现的。并以一个简单的JS时钟示例作为演示。
各位如果觉得有什么不妥的地方欢迎指出。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
(
function
JSClock(){
// partial class JSClock {
var _timeID = null ;
var _timeRunning = false ;
var _info;
var _this;
// 构造函数
function JSClock(elementId) {
_this = this ;
_info = document.getElementById(elementId);
}
JSClock.prototype.getDateTime = function (){}; // 因为具体显示需求不同所以没实现
JSClock.prototype.run = function () {
var now = {};
var tick = new Date();
now.hours = tick.getHours();
now.minutes = tick.getMinutes();
now.seconds = tick.getSeconds();
now.day = tick.getDay();
now.month = tick.getMonth() + 1 ;
now.date = tick.getDate();
now.year = tick.getYear();
if (now.year < 1000 ) now.year += 1900 ;
_timeRunning = true ;
_info.innerHTML = _this.getDateTime(now);
_timeID = setTimeout(arguments.callee, 1000 );
};
JSClock.prototype.stop = function (){
if ( ! _timeRunning) return
clearTimeout(_timeID);
_timeRunning = false ;
};
// }
window.JSClock = JSClock;
})();
// partial class JSClock{
// virtual
JSClock.prototype.getDateTime = function (now){
var current,weekday;
current = now.year + " 年 " + now.month + " 月 " + now.date + " 日 " + ((now.hours > 12 ) ? now.hours - 12 :now.hours);
current += ((now.minutes < 10 ) ? " :0 " : " : " ) + now.minutes;
current += ((now.seconds < 10 ) ? " :0 " : " : " ) + now.seconds;
current += (now.hours >= 12 ) ? " (下午) " : " (上午) " ;
if (now.day == 0 ) weekday = " 星期日 " ;
if (now.day == 1 ) weekday = " 星期一 " ;
if (now.day == 2 ) weekday = " 星期二 " ;
if (now.day == 3 ) weekday = " 星期三 " ;
if (now.day == 4 ) weekday = " 星期四 " ;
if (now.day == 5 ) weekday = " 星期五 " ;
if (now.day == 6 ) weekday = " 星期六 " ;
current += weekday;
return current;
};
// }
// 测试
var time = new JSClock( " test " );
time.run();
// partial class JSClock {
var _timeID = null ;
var _timeRunning = false ;
var _info;
var _this;
// 构造函数
function JSClock(elementId) {
_this = this ;
_info = document.getElementById(elementId);
}
JSClock.prototype.getDateTime = function (){}; // 因为具体显示需求不同所以没实现
JSClock.prototype.run = function () {
var now = {};
var tick = new Date();
now.hours = tick.getHours();
now.minutes = tick.getMinutes();
now.seconds = tick.getSeconds();
now.day = tick.getDay();
now.month = tick.getMonth() + 1 ;
now.date = tick.getDate();
now.year = tick.getYear();
if (now.year < 1000 ) now.year += 1900 ;
_timeRunning = true ;
_info.innerHTML = _this.getDateTime(now);
_timeID = setTimeout(arguments.callee, 1000 );
};
JSClock.prototype.stop = function (){
if ( ! _timeRunning) return
clearTimeout(_timeID);
_timeRunning = false ;
};
// }
window.JSClock = JSClock;
})();
// partial class JSClock{
// virtual
JSClock.prototype.getDateTime = function (now){
var current,weekday;
current = now.year + " 年 " + now.month + " 月 " + now.date + " 日 " + ((now.hours > 12 ) ? now.hours - 12 :now.hours);
current += ((now.minutes < 10 ) ? " :0 " : " : " ) + now.minutes;
current += ((now.seconds < 10 ) ? " :0 " : " : " ) + now.seconds;
current += (now.hours >= 12 ) ? " (下午) " : " (上午) " ;
if (now.day == 0 ) weekday = " 星期日 " ;
if (now.day == 1 ) weekday = " 星期一 " ;
if (now.day == 2 ) weekday = " 星期二 " ;
if (now.day == 3 ) weekday = " 星期三 " ;
if (now.day == 4 ) weekday = " 星期四 " ;
if (now.day == 5 ) weekday = " 星期五 " ;
if (now.day == 6 ) weekday = " 星期六 " ;
current += weekday;
return current;
};
// }
// 测试
var time = new JSClock( " test " );
time.run();
//运行结果会在ID为test的元素中实时显示当前时间格式如:
//2010年2月6日 0:13:53 (上午) 星期六