0

当我更深入地使用 Javascript 时,我在尝试测试时得到了这个奇怪的结果。

function CustomeObject() {
    this.type = "custom";
};
var node1 = document.createTextNode(Date.prototype);
var node2 = document.createTextNode(CustomeObject.prototype);

document.getElementsByTagName("body")[0].appendChild(node1);
document.getElementsByTagName("body")[0].appendChild(node2);

结果如下:

无效日期 [object 对象]

正如我从互联网上的一个来源读到的,它说:原型是任何对象的内置属性,它实际上是一个对象本身。但是这个测试在日期对象上失败了。你能告诉我测试日期原型属性的代码有什么问题吗?谢谢!

4

2 回答 2

1

当您传递Date.prototypedocument.createTextNode()它时,它将隐式调用toString()传递的对象。

的默认输出toString()[object Object],如您的第二个测试中所示。

但是Date.prototype有它自己的 toString()函数,其目的是将当前Date对象(即this)作为文本返回。

var now = new Date();
console.log(now.toString()); // outputs current date
console.log(now);            // does the same due to implicit toString() call

当您直接调用该函数时,它的this指针错误地包含Data.prototype而不是日期对象,因此"Invalid Date"输出。

于 2012-08-29T10:49:24.900 回答
0

因为Date.prototype是一个.toString()返回的对象Invalid Date

var d = Date.prototype;
console.log(d); // will output 'Invalid Date', because the object doesn't have any date info.
d.setFullYear(2012);
console.log(d); // will output the date string.
于 2012-08-29T10:50:59.103 回答