Details
Description
As a compatibility and convenience measure, ICEfaces extends the prototypes of native JS types with a variety of helper functions and shims for advanced ECMAscript features.
However the extend ends up overwriting functions that have existing native implementations. This is generally discouraged for a few of reasons, primarily that this has a global effect, and that the overwriting implementation may not provide the expected functionality to 3rd party scripts, or that the overwriting implementation is slower due to being evaluated JS versus native C JSVM code.
I encountered this issue when attempting to use Array.prototype.filter to filter a NodeList as recommended by MDN documentation and it broke due to our implementations assumptions. As higher-order JS techniques like this become more popular we run greater risk of being incompatible.
A naive change, if possible would be to make extend not overwrite. If extend is used with the expectation of overwriting throughout or code this may not be possible however. In that case we may need to alter the calls to extend prototypes to indicate explicitly not to overwrite.
However the extend ends up overwriting functions that have existing native implementations. This is generally discouraged for a few of reasons, primarily that this has a global effect, and that the overwriting implementation may not provide the expected functionality to 3rd party scripts, or that the overwriting implementation is slower due to being evaluated JS versus native C JSVM code.
I encountered this issue when attempting to use Array.prototype.filter to filter a NodeList as recommended by MDN documentation and it broke due to our implementations assumptions. As higher-order JS techniques like this become more popular we run greater risk of being incompatible.
A naive change, if possible would be to make extend not overwrite. If extend is used with the expectation of overwriting throughout or code this may not be possible however. In that case we may need to alter the calls to extend prototypes to indicate explicitly not to overwrite.
Issue Links
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #37009 | Wed Jul 17 17:44:32 MDT 2013 | nils.lundquist | |
Files Changed | ||||
MODIFY
/icefaces3/trunk/icefaces/compat/core/src/main/javascript/prototype/prototype.js
|
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #36972 | Tue Jul 16 12:16:28 MDT 2013 | nils.lundquist | Revert: Incompatibility with Prototype resolved with resolution of |
Files Changed | ||||
MODIFY
/icemobile/trunk/icemobile/jsf/components/component/resources/org.icefaces.component.util/component.js
|
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #36971 | Tue Jul 16 12:14:11 MDT 2013 | nils.lundquist | |
Files Changed | ||||
MODIFY
/icefaces3/trunk/icefaces/compat/core/src/main/javascript/prototype/prototype.js
|
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #35644 | Wed May 29 14:43:01 MDT 2013 | nils.lundquist | Revert: |
Files Changed | ||||
MODIFY
/icefaces3/trunk/icefaces/compat/core/src/main/javascript/prototype/prototype.js
|