Extending Array.prototype: What Could Go Wrong?
Google JavaScript Style Guide strongly discourages extending Array.prototype. However, some developers may resort to this to add functionality to old browsers. While this practice might seem harmless, it can lead to potential issues.
Listed Dangers:
-
for...in Loop: Extending Array.prototype can disrupt for...in loops, as it iterates over both native and added properties. To mitigate this, use hasOwnProperty to verify property ownership before accessing it.
-
Property Name Clashes: Multiple parties extending Array.prototype with the same function name can create conflicts. To avoid this, only extend native prototypes when necessary or if the function is part of a standard library like Array.prototype.filter.
-
Browser Compatibility: Despite polyfilling and shimming, extended functions may not work as expected across all browsers, particularly older ones. The issue with Object.keys in IE7 is a notable example.
Considerations:
-
Use Cases: Polyfilling standard functionality like Array.prototype.filter is generally beneficial. However, extending natives for unique purposes should be approached with caution.
-
Exclusivity: Only extend natives when you are confident that you are the only one doing so. If multiple parties are extending with the same functionality, consider creating a shim library.
Conclusion:
Extending Array.prototype can be a risky practice. While polyfilling standard functionality is acceptable, developers should be aware of the potential consequences, such as loop issues, property name collisions, and browser compatibility problems. By carefully considering these issues, you can minimize the risks associated with extending native prototypes.
The above is the detailed content of When Should You Extend Array.prototype and What Are the Risks?. For more information, please follow other related articles on the PHP Chinese website!