首页 > web前端 > js教程 > 如何在不破坏 For-In 循环的情况下安全地扩展数组和对象原型?

如何在不破坏 For-In 循环的情况下安全地扩展数组和对象原型?

Mary-Kate Olsen
发布: 2024-12-09 13:40:15
原创
634 人浏览过

How Can I Safely Extend Array and Object Prototypes Without Breaking For-In Loops?

扩展数组和对象原型而不混乱 For-In 循环

使用辅助方法扩展 Array.prototype 和 Object.prototype 时,确保这些方法不会通过显示为值来干扰 for-in 循环至关重要。这在其他代码依赖 for-in 循环仅访问值的情况下尤其重要。

避免使用数组的 For-In 循环

理想的解决方案是避免对数组使用 for-in 循环。相反,请使用特定于数组的迭代方法,例如内置的 .map() 和 .filter()。避免在可能同时遇到数组和对象的泛型函数中使用 for-in 循环。

对对象使用 hasOwnProperty()

如果在泛型中使用 for-in 循环是不可避免的函数,利用 hasOwnProperty() 方法排除从原型:

for (var prop in anyObj)
    if (Object.prototype.hasOwnProperty.call(anyObj, prop))
        // do something
登录后复制

ECMAScript 5.1 中的不可枚举属性

在 ECMAScript 5.1 中,您可以使用 Object.defineProperty() 将属性设置为不可枚举:

Object.defineProperty(Array.prototype, "find", {
    enumerable: false,
    writable: true,
    value: function(testFun) {
        // code to find element in array
    }
});
登录后复制

这确保了“找到”方法不会出现在 for-in 循环中。但是,需要注意的是,旧版浏览器不支持这种方法。考虑使用 ES5-shim 等垫片来实现兼容性。

以上是如何在不破坏 For-In 循环的情况下安全地扩展数组和对象原型?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板