如何在javascript中避免原型污染?

时间:2017-07-22 17:15:29

标签: javascript prototypal-inheritance

在javascript中,可以"覆盖" Object.prototype的属性或方法。例如:

Object.prototype.toString = function(){
  return "some string";
};

如果不仔细使用,它可能会破坏整个应用程序。是否有任何工具,技术或方法可以避免这种情况(例如,某种“严格模式”并不允许开发人员覆盖Object的属性)?

1 个答案:

答案 0 :(得分:6)

Object.freeze(YourConstructor.prototype)可以帮助保护您的构造函数的相关原型对象免遭混乱。来自MDN:

  

Object.freeze()方法会冻结一个对象:即阻止向其添加新属性;防止删除现有属性;并且可以防止现有属性或其可枚举性,可配置性或可写性被更改,还可以防止原型被更改。

它适用于对象本身,而不是制作一个被冻结的副本。它返回你传递的相同引用。

最好不要单独留下内置原型,因此在Object.prototype上使用它并不是一个好主意。 :-)当然,你需要做一个很多的测试...请参阅es-discuss邮件列表上的this thread以获取相关的有用信息。