带有功能的Javascript对象原型vs对象[重复]

问题描述 投票:0回答:1

通常,我们可以通过执行以下操作来制作原型:

HTMLElement.prototype.myFunc = function(){...}

我的问题是,可以吗:

var myObj = {
    foo:function(){...},
    bar:function(){...}
}
HTMLElement.prototype.myFunc = myObj;

以上方法确实有效,但是以这种方式进行安全/有效吗?优点/缺点是什么?任何建议都非常感谢。谢谢。

javascript function object prototype prototyping
1个回答
0
投票

我认为这两种方法都不是一个好主意,因为它会使内置原型发生变异,这可能会引起问题。页面上的其他代码很可能不希望myFunc上存在HTMLElement.prototype。页面越复杂,包含的库越多,当您更改不应更改的公共对象时,代码就变得越脆弱。更糟糕的是,如果页面上的某些other代码遵循类似的不良做法并尝试添加HTMLElement.prototype.myFunc本身,该怎么办?然后,您的页面将(几乎可以肯定)中断。

类似地,一些使内置原型发生变异的网站是导致Array.prototype.flattenArray.prototype.flatten提案失败的原因-在发现一些提案后,它们不得不分别重命名为Array.prototype.containsArray.prototype.contains结果导致遵循不良做法的网站崩溃了。这种情况是不可取的。最好是Array.prototype.flat,除非更改是添加现代浏览器已经具备的规范兼容属性/方法,如polyfills。

[如果可能,请考虑使用其他方法,也许像jQuery一样-可以使元素通过包装函数传递,而不是使Array.prototype.includes变异,该函数返回具有avoid changing built-in objectsHTMLElement.prototype方法的对象。

© www.soinside.com 2019 - 2024. All rights reserved.