您好我想知道如何扩展像Date这样的构造函数, 问题是我有一个庞大的,非常大的应用程序,我想知道每次Date对象的实例化。基本上我想在构造函数中打印一些东西。我不想定义一个新的construtor,我将在其中调用Date(),然后在整个代码中用新的构造函数替换Date。 我真的想延长日期。我想出了这个:
var previousPrototype = Date.prototype;
Date = function() {
previousPrototype.constructor.call(this);
console.log('new Date instanciation');
}
Date.prototype = previousPrototype;
var extendedDate = new Date(); // prints 'new Date instanciation'
这似乎很好,但是当我做extendedDate.getTime()
时,我得到了那个甜蜜的信息
VM103:1 Uncaught TypeError: this is not a Date object.
我不明白为什么它不起作用,任何帮助都将不胜感激
答案 0 :(得分:0)
最简单的解决方案可能是:
var previousDate = Date;
Date = function () {
console.log(1);
return new previousDate();
};
var extendedDate = new Date();
console.log(extendedDate.getTime());

你的函数nether使用关键字this
也不返回任何对象。您应该首先初始化Date对象并将其存储在变量中。在函数结束时,您应该返回该对象。
示例程序如下:
var previousDate = Date;
Date = function() {
var newDate = new previousDate();
newDate.newproperty = true;
return newDate;
}
// Date.prototype = previousPrototype;
var extendedDate = new Date();
console.log(extendedDate.getTime());
console.log(extendedDate.newproperty);

上面的代码虽然不够好。如果您尝试将警报添加到构造函数中,您会发现它在当前环境中被多次调用,但它将在真实环境中工作:
var previousDate = Date;
Date = function() {
var newDate = new previousDate();
newDate.newproperty = true;
alert("Called!");
return newDate;
}
// Date.prototype = previousPrototype;
var extendedDate = new Date();
console.log(extendedDate.getTime());
console.log(extendedDate.newproperty);