我正在尝试使用JavaScript扩展Date原型:
Date.prototype.toLastDayOfPreviousMonth = function() {
return new Date(this.getFullYear(), this.getMonth(), 0);
}
但是我不确定我是否可以期望this
在这里为空。我的想法是,如果有人想做这样的事情:
var dateA = null;
dateA.toLastDayOfPreviousMonth();
上面的函数永远不会被调用 - 因为我们在null而不是Date上调用它。我对通过应用等调用函数的怪癖不感兴趣。只是'真实'用法date.toLastDayOfPreviousmonth();
我发现的其中一个类似的扩展程序进行了此检查:
var obj = this instanceof Date ? this : null;
它有任何意义吗?
答案 0 :(得分:1)
不是马虎模式。在该模式下,this
值必须始终为对象。如果您传递null
或undefined
原语,this
值最终将成为全局对象。
但是,严格模式允许任意值。是的,this
可以是null
。
"use strict";
Date.prototype.toLastDayOfPreviousMonth = function() {
return this === null;
};
Date.prototype.toLastDayOfPreviousMonth.call(null); // true
如果您不想考虑手动传递自定义this
值的方式(例如call
,apply
,bind
或Reflect
),然后
this
将是草率模式下的全局对象,而undefined
将是严格模式。this
将成为该对象。 null
不是一个选项,因为它不是一个对象。this
将是该对象包装器。 null
不是一个选项,因为它不是可以包装对象的。