Javascript 说“;HTMLElement.prototype.someFunc=&x201D;和“;HTMLElement.someFunc=”;?

Javascript 说“;HTMLElement.prototype.someFunc=&x201D;和“;HTMLElement.someFunc=”;?,javascript,methods,member,prototyping,Javascript,Methods,Member,Prototyping,在许多地方,我已经能够以两种方式注册所有HTMLElement的方法。 所以我很好奇,有什么不同吗? 我应该选择一种方法而不是另一种吗? 正确的方法是什么?使用prototype就是让prototype链中的所有对象都可以使用该功能。它基本上是在扩展类。而另一个只是向当前元素添加属性。但是正如Felix建议的那样,正确的做法是根本不这样做。因为JavaScript是一种基于原型的语言,而不是基于类的语言,它们的关键字是。prototype.variable或。\uuuuuuuuuuu proto

在许多地方,我已经能够以两种方式注册所有HTMLElement的方法。
所以我很好奇,有什么不同吗?
我应该选择一种方法而不是另一种吗?

正确的方法是什么?

使用prototype就是让prototype链中的所有对象都可以使用该功能。它基本上是在扩展类。而另一个只是向当前元素添加属性。但是正如Felix建议的那样,正确的做法是根本不这样做。

因为JavaScript是一种基于原型的语言,而不是基于类的语言,它们的关键字是
。prototype.variable
。\uuuuuuuuuuu proto\uuuuuuuu。variable
(用于数学)用于直接访问原型(如基于类的语言中的类定义)并对其进行修改,从而影响其所有实例,即使这些实例是在修改原型之前创建的。而不访问原型的.variable只影响指定的实例


简而言之,“HTMLElement.prototype.someFunc=”将允许所有HTMLElement(以及从HTMLElement继承的原型)"要访问someFunc.和HtmleElement.someFunc,应该只允许HtmleElement的特定实例访问someFunc。

正确的做法是根本不这样做。DOM接口不必遵循与本机JavaScript对象相同的规则。在某些IE版本中,您甚至无法访问原型或构造函数函数ions afaik。扩展DOM(“主机”)原型通常被认为是一个糟糕的想法。这方面的另一篇好文章:(感谢@Pointy提供的链接)。如果您想了解原型继承的一般知识,请看一下。@felix kling不幸的是,我没有问到这一点。