如何扩展文档对象?

时间:2012-10-02 11:56:15

标签: javascript prototype

我目前正在努力更好地理解JavaScript和原型设计。

我想在document添加一个函数,但在prototypedocument未定义。

此代码:

document.prototype.writeLine = function(text){
    this.write(text);
    this.write("<br />");  
};

生成此错误:

// In FireFox
TypeError: document.prototype is undefined

// In Chrome
Uncaught TypeError: Cannot set property 'writeLine' of undefined 

如何扩展document对象以便能够调用与document.WriteLine('MyText')类似的内容?

以下是我正在使用的Fiddle

3 个答案:

答案 0 :(得分:8)

我更新了您的fiddle。您遇到的问题是document对象是HTMLDocument对象类型的实例。 实例本身没有原型,但HTMLDocument确实如此。

更新:这是fiddle更新,适用于IE9,因为在IE9下HTMLDocumentundefined

答案 1 :(得分:1)

问题是document的类型为object,而不是function。在JavaScript中,您使用函数作为构造函数,如下所示:

function MyClass() {
    this.myProperty = "something";
}

您可以按如下方式创建MyClass的实例:

var myInstance = new MyClass;
alert(myInstance.myProperty);

每个函数都有一个名为prototype的属性,它是一个对象。原型的所有属性都继承了构造函数的实例:

MyClass.prototype.displayProperty = function () {
    alert(this.myProperty);
};

myInstance.displayProperty();

在你的情况下,因为document是构造函数的实例而不是构造函数本身,所以它上面没有名为prototype的属性。

有关JavaScript继承的更多信息,请阅读此answer

答案 2 :(得分:0)

非常简单,document和Document都不同,document是窗口的文档,Document是文档的界面(从DOM来),如果您喜欢在文档中添加新的原型供您使用,需要将此添加到文档中,如下所示:
window.Document.prototype.Sayhi =“ Hello World” Document.prototype.Sayhi =“ Hello World” 现在您可以从文档中调用该文件,例如 document.sayhi 之所以会这样,是因为您需要在接口上设置原型,例如,如果需要在“对象”窗口中添加新原型,则需要在“窗口”界面上设置它,例如: Window.prototype.Saybye =“再见兄弟以后再见” 然后您可以在窗口中调用原型。 记住,Window是一个包含Document和document ****之类的窗口的界面。