通常,我们可以通过执行以下操作来制作原型:
HTMLElement.prototype.myFunc = function(){...}
我的问题是,可以吗:
var myObj = {
foo:function(){...},
bar:function(){...}
}
HTMLElement.prototype.myFunc = myObj;
以上方法确实有效,但是以这种方式进行安全/有效吗?优点/缺点是什么?任何建议都非常感谢。谢谢。
我认为这两种方法都不是一个好主意,因为它会使内置原型发生变异,这可能会引起问题。页面上的其他代码很可能不希望myFunc
上存在HTMLElement.prototype
。页面越复杂,包含的库越多,当您更改不应更改的公共对象时,代码就变得越脆弱。更糟糕的是,如果页面上的某些other代码遵循类似的不良做法并尝试添加HTMLElement.prototype.myFunc
本身,该怎么办?然后,您的页面将(几乎可以肯定)中断。
类似地,一些使内置原型发生变异的网站是导致Array.prototype.flatten
和Array.prototype.flatten
提案失败的原因-在发现一些提案后,它们不得不分别重命名为Array.prototype.contains
和Array.prototype.contains
结果导致遵循不良做法的网站崩溃了。这种情况是不可取的。最好是Array.prototype.flat
,除非更改是添加现代浏览器已经具备的规范兼容属性/方法,如polyfills。
[如果可能,请考虑使用其他方法,也许像jQuery一样-可以使元素通过包装函数传递,而不是使Array.prototype.includes
变异,该函数返回具有avoid changing built-in objects和HTMLElement.prototype
方法的对象。