为什么打印window对象而不是date对象?
Why does it print the window object instead of printing the date object?
我看到了这段代码。我希望this
是日期而不是窗口对象。我在Firefox的记事本上运行这个。我错过了什么?
这个图像描述了结果
Date.prototype.nextDay = function() {
console.log('Printing this ' + this);
var currentdate = this.getDate();
return new Date(this.setDate(currentdate + 1));
}
(function() {
var date = new Date();
document.write(date);
document.write(date.nextDay());
})();
您遇到了JavaScript的自动分号插入(或者在本例中没有分号插入)。
你认为是两个独立的语句:
Date.prototype.nextDay = function () { ... }
和
(function () { ... })();
被解释为单个语句:
Date.prototype.nextDay = function () { ... }(function () { ... })();
您的第一个匿名函数被立即调用,第二个匿名函数作为其参数。
由于它没有作为任何对象的方法调用,并且由于您没有在严格模式下运行,因此this
正在求值为全局对象。这就解释了你所看到的行为。
在一行的开头有一个开括号是JavaScript解析器无法"猜"出你想结束前一个语句的少数几个地方之一。尽量避免使用分号的人通常会在任何语句开头的圆括号前面加一个分号:
Date.prototype.nextDay = function () {
console.log('Printing this ' + this)
var currentdate = this.getDate()
return new Date(this.setDate(currentdate + 1))
}
;(function () {
var date = new Date()
console.log(date)
console.log(date.nextDay())
})()
相关文章:
- date对象未在javascript中返回正确的日期值
- Date对象未返回预期年份
- JS:如何将字符串(“2015年3月10日”)转换为Date对象
- 当绑定到Date()-对象时,如何格式化input[time]的值
- Javascript Date 对象因格式而异:yyyy-mm-dd vs mm-dd-yyyy
- 将Date对象转换为毫秒
- 为什么我的Date对象返回当前日期
- Javascript Date对象到日期字符串
- Date对象在Chrome中有效,但在Safari、Firefox或IE中无效
- 如何使用moment.js测试javascript对象是否为Date
- 如何测试Date对象是否等于特定日期
- 为什么js会从具有特定格式的Date对象中减去一天
- highcharts:将useUTC=true milliseconds转换为javascript Date对象
- 将 JavaScript Date 对象格式化为特定格式
- 从 Date() 对象返回 dd-mm-yyyyy
- Javascript Date 对象失败
- Date 对象在尝试计算 IE8 中两个日期之间的时间时返回 NaN
- 如何从字符串构造一个 javascript Date 对象
- 与 API 一起使用时,将 Date 对象存储在数据库中的最佳实践是什么
- 将字符串转换为 JavaScript 的 Date 对象的方法