我目前正在努力更好地理解JavaScript和原型设计。
我想在document
添加一个函数,但在prototype
上document
未定义。
此代码:
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。
答案 0 :(得分:8)
我更新了您的fiddle。您遇到的问题是document
对象是HTMLDocument
对象类型的实例。 实例本身没有原型,但HTMLDocument
确实如此。
更新:这是fiddle更新,适用于IE9,因为在IE9下HTMLDocument
为undefined
。
答案 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 ****之类的窗口的界面。