ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಮಾಸ್ಟರಿಂಗ್ ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರಾಪರ್ಟಿ ಪುನರಾವರ್ತನೆ
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಆಬ್ಜೆಕ್ಟ್-ಆಧಾರಿತ ವಿಧಾನವನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವುದರಿಂದ ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಸಂಘಟಿತ ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದಾಗಿದೆ. ಈ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸುವ ವಿಧಾನಗಳ ಜೊತೆಗೆ ವಸ್ತುಗಳಲ್ಲಿನ ಸಂಬಂಧಿತ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಗುಂಪು ಮಾಡುವುದು ಸಾಮಾನ್ಯ ಮಾದರಿಯಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಪುನರಾವರ್ತನೆಯ ಸಮಯದಲ್ಲಿ ವಿಧಾನಗಳು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಗುಣಲಕ್ಷಣಗಳೊಂದಿಗೆ ಮಧ್ಯಪ್ರವೇಶಿಸಿದಾಗ ಇದು ಆಗಾಗ್ಗೆ ಸವಾಲುಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಒಂದು ವಿಶಿಷ್ಟ ಉದಾಹರಣೆಯು ಬಳಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ Object.keys() ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳ ಮೇಲೆ ಪುನರಾವರ್ತಿಸಲು. ಈ ಪುನರಾವರ್ತನೆಯ ಸಮಯದಲ್ಲಿ ವಿಧಾನಗಳನ್ನು ಹೊರಗಿಡುವ ಅಗತ್ಯವನ್ನು ಡೆವಲಪರ್ಗಳು ಆಗಾಗ್ಗೆ ಎದುರಿಸುತ್ತಾರೆ. ಇದು ಕಾರ್ಯಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಲು ಷರತ್ತುಬದ್ಧ ಷರತ್ತು ಸೇರಿಸುವ ಅಗತ್ಯವಿದೆ, ಇದು ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ತೊಡಕಾಗಿ ಮಾಡುತ್ತದೆ ಮತ್ತು ಸಂಕೀರ್ಣ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ನಿರ್ವಹಿಸಲು ಕಷ್ಟವಾಗುತ್ತದೆ.
ನೆಸ್ಟೆಡ್ ಆಬ್ಜೆಕ್ಟ್ಗಳ ಒಳಗೆ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಗುಂಪು ಮಾಡುವುದು, ಅವುಗಳನ್ನು ವಿಧಾನಗಳಿಂದ ಪ್ರತ್ಯೇಕಿಸುವುದು ಒಂದು ಪರ್ಯಾಯವಾಗಿದೆ. ಇದು ಅನಪೇಕ್ಷಿತ ಸಂವಹನಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಇದು ಮೂಲಕ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪ್ರವೇಶಿಸುವಂತಹ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದ ಉಲ್ಲೇಖವನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ myObj.props.prop1 ಬದಲಿಗೆ myObj.prop1. ಕೋಡ್ ಓದುವಿಕೆ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕತೆಯ ನಡುವಿನ ಈ ವ್ಯಾಪಾರವು ಡೆವಲಪರ್ಗಳಿಗೆ ಆಸಕ್ತಿದಾಯಕ ಸಂದಿಗ್ಧತೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.
ಈ ಲೇಖನದಲ್ಲಿ, ಕೋಡ್ ಅನ್ನು ಸೊಗಸಾದ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಇರಿಸಿಕೊಂಡು ಈ ಸವಾಲುಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಪ್ರಾಯೋಗಿಕ ವಿಧಾನಗಳನ್ನು ನಾವು ಅನ್ವೇಷಿಸುತ್ತೇವೆ. ಷರತ್ತುಗಳ ಮೇಲೆ ಹೆಚ್ಚು ಅವಲಂಬಿಸದೆ ವಸ್ತು ಗುಣಲಕ್ಷಣಗಳ ಮೇಲೆ ಪುನರಾವರ್ತಿಸಲು ನಾವು ವಿಭಿನ್ನ ತಂತ್ರಗಳನ್ನು ನೋಡುತ್ತೇವೆ. ಕೊನೆಯಲ್ಲಿ, ಅನಗತ್ಯ ಸಂಕೀರ್ಣತೆಗಳನ್ನು ತಪ್ಪಿಸುವ ಹೆಚ್ಚು ವಸ್ತು-ಆಧಾರಿತ ಶೈಲಿಯಲ್ಲಿ ವಸ್ತುಗಳನ್ನು ರಚಿಸುವ ಒಳನೋಟಗಳನ್ನು ನೀವು ಪಡೆಯುತ್ತೀರಿ.
ಆಜ್ಞೆ | ಬಳಕೆಯ ಉದಾಹರಣೆ |
---|---|
Object.defineProperty() | ಆಬ್ಜೆಕ್ಟ್ನಲ್ಲಿ ಹೊಸ ಆಸ್ತಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದಾದ ಆಯ್ಕೆಗಳೊಂದಿಗೆ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಒಂದನ್ನು ಮಾರ್ಪಡಿಸುತ್ತದೆ ಎಣಿಸಬಹುದಾದ ಮತ್ತು ಬರೆಯಬಹುದಾದ. ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ, ಇದು ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯ ಸಮಯದಲ್ಲಿ ಎಣಿಕೆಯಿಂದ ವಿಧಾನವನ್ನು ಮರೆಮಾಡುತ್ತದೆ. |
Symbol() | ಅನನ್ಯ ಮತ್ತು ಬದಲಾಗದ ಗುರುತಿಸುವಿಕೆಯನ್ನು ರಚಿಸುತ್ತದೆ. ನಾವು ಎ ಬಳಸಿದ್ದೇವೆ ಚಿಹ್ನೆ ವಿಧಾನಕ್ಕೆ ಎಣಿಸಲಾಗದ ಕೀಲಿಯನ್ನು ನಿಯೋಜಿಸಲು, ಇದು ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯೊಂದಿಗೆ ಮಧ್ಯಪ್ರವೇಶಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. |
Object.entries() | ಕೊಟ್ಟಿರುವ ವಸ್ತುವಿನ ಸ್ವಂತ ಎಣಿಕೆ ಮಾಡಬಹುದಾದ ಕೀ-ಮೌಲ್ಯದ ಜೋಡಿಗಳ ಸರಣಿಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಇದು ಏಕಕಾಲದಲ್ಲಿ ಕೀಗಳು ಮತ್ತು ಮೌಲ್ಯಗಳ ಮೂಲಕ ಪುನರಾವರ್ತಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ನಮ್ಮ ಎರಡನೇ ಉದಾಹರಣೆಯಲ್ಲಿ ವಸ್ತು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ. |
forEach() | ರಚನೆಯ ಪ್ರತಿಯೊಂದು ಅಂಶಕ್ಕೂ ಒಂದು ಕಾರ್ಯವನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ. ಸ್ಕ್ರಿಪ್ಟ್ಗಳಲ್ಲಿ, ಪ್ರತಿ () ಸ್ಟ್ರಿಂಗ್ ಮೌಲ್ಯಗಳನ್ನು ದೊಡ್ಡಕ್ಷರಕ್ಕೆ ಪರಿವರ್ತಿಸಲು ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳ ಮೂಲಕ ಲೂಪ್ ಮಾಡಲು ಬಳಸಲಾಗುತ್ತದೆ. |
class | ವಸ್ತುಗಳನ್ನು ರಚಿಸಲು ನೀಲನಕ್ಷೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ವರ್ಗ ಆಧಾರಿತ ಉದಾಹರಣೆಯಲ್ಲಿ, ದಿ MyObject ವರ್ಗವು ಮಾಡ್ಯುಲರ್, ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕೋಡ್ಗಾಗಿ ಡೇಟಾ (ಪ್ರಾಪರ್ಟೀಸ್) ಮತ್ತು ನಡವಳಿಕೆ (ವಿಧಾನಗಳು) ಎರಡನ್ನೂ ಆವರಿಸುತ್ತದೆ. |
Object.keys() | ವಸ್ತುವಿನ ಸ್ವಂತ ಎಣಿಕೆ ಮಾಡಬಹುದಾದ ಗುಣಲಕ್ಷಣಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಎಣಿಸಲಾಗದ ವಿಧಾನಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುವಾಗ ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡಲು ಮತ್ತು ಪುನರಾವರ್ತಿಸಲು ನಾವು ಇದನ್ನು ಬಳಸಿದ್ದೇವೆ. |
require() | ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಆಮದು ಮಾಡಲು Node.js ನಲ್ಲಿ ಬಳಸಲಾಗಿದೆ. ನಮ್ಮ ಜೆಸ್ಟ್ ಪರೀಕ್ಷೆಯ ಉದಾಹರಣೆಯಲ್ಲಿ, ಅಗತ್ಯವಿದೆ('@jest/globals') ಪರೀಕ್ಷೆಯಂತಹ ಜೆಸ್ಟ್ ಕಾರ್ಯಗಳನ್ನು ಆಮದು ಮಾಡಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಘಟಕ ಪರೀಕ್ಷೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಬಹುದು. |
test() | ಪರೀಕ್ಷಾ ಬ್ಲಾಕ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಜೆಸ್ಟ್ ಕಾರ್ಯ. ಇದರೊಂದಿಗೆ ಔಟ್ಪುಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸುವ ಮೂಲಕ ನಮ್ಮ ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯು ನಿರೀಕ್ಷೆಯಂತೆ ವರ್ತಿಸುತ್ತದೆ ಎಂದು ಪರಿಶೀಲಿಸಲು ಪ್ರತಿಯೊಂದು ಪರೀಕ್ಷಾ ಬ್ಲಾಕ್ ನಿರ್ದಿಷ್ಟ ತರ್ಕವನ್ನು ನಡೆಸುತ್ತದೆ ನಿರೀಕ್ಷಿಸಿ (). |
expect() | ಅಭಿವ್ಯಕ್ತಿಯ ಫಲಿತಾಂಶವು ನಿರೀಕ್ಷಿತ ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವ ಮತ್ತೊಂದು ಜೆಸ್ಟ್ ಕಾರ್ಯ. ನಮ್ಮ ವಿಧಾನಗಳು ಆಬ್ಜೆಕ್ಟ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಸರಿಯಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ ಎಂದು ಮೌಲ್ಯೀಕರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. |
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಪ್ರಾಪರ್ಟೀಸ್ ಅನ್ನು ಪುನರಾವರ್ತನೆ ಮಾಡಲು ಪರಿಹಾರಗಳನ್ನು ಅನ್ವೇಷಿಸುವುದು
ನಾವು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿವೆ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್: ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಮಾರ್ಪಡಿಸದೆ ಅಥವಾ ವಿಧಾನಗಳೊಂದಿಗೆ ಸಂವಹನ ಮಾಡದೆಯೇ ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳ ಮೇಲೆ ಪುನರಾವರ್ತಿಸುವುದು ಹೇಗೆ. ಮೊದಲ ಪರಿಹಾರದಲ್ಲಿ, ನಾವು ಬಳಸುತ್ತೇವೆ Object.defineProperty ವಿಧಾನವನ್ನು ಎಣಿಸಲಾಗದಂತೆ ಮಾಡಲು. ನಾವು ಬಳಸುವ ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳ ಮೇಲೆ ಲೂಪ್ ಮಾಡಿದಾಗ ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ Object.keys(), ವಿಧಾನವನ್ನು ಪುನರಾವರ್ತನೆಯಿಂದ ಹೊರಗಿಡಲಾಗಿದೆ. ಈ ವಿಧಾನವು ನಮ್ಮ ಡೇಟಾದ ಸಮಗ್ರತೆಯನ್ನು ಸಂರಕ್ಷಿಸುತ್ತದೆ ಮತ್ತು ಲೂಪ್ನಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಷರತ್ತುಬದ್ಧ ಪರಿಶೀಲನೆಗಳ ಅಗತ್ಯವನ್ನು ತಪ್ಪಿಸುತ್ತದೆ.
ಮತ್ತೊಂದು ಪ್ರಮುಖ ಪರಿಹಾರವು ಬಳಕೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ ES6 ಚಿಹ್ನೆಗಳು. ಎಣಿಕೆ ಅಥವಾ ಪುನರಾವರ್ತನೆ ಪ್ರಕ್ರಿಯೆಗಳೊಂದಿಗೆ ಮಧ್ಯಪ್ರವೇಶಿಸದೆಯೇ ವಸ್ತುಗಳಿಗೆ ಗುಣಲಕ್ಷಣಗಳು ಅಥವಾ ವಿಧಾನಗಳನ್ನು ಸೇರಿಸಲು ಚಿಹ್ನೆಗಳು ಒಂದು ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ. ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ, ಸಿಂಬಲ್ ಕೀಗೆ ವಿಧಾನವನ್ನು ನಿಯೋಜಿಸುವುದರಿಂದ ಅದು ಮರೆಮಾಡಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ Object.entries(), ಆಬ್ಜೆಕ್ಟ್ನ ಕೀಗಳು ಮತ್ತು ಮೌಲ್ಯಗಳೆರಡರಲ್ಲೂ ನಾವು ಪುನರಾವರ್ತಿಸಲು ಬಳಸುತ್ತೇವೆ. ಕೆಲವು ಗುಣಲಕ್ಷಣಗಳು ಅಥವಾ ವಿಧಾನಗಳು ಪುನರಾವರ್ತನೆ ತರ್ಕಕ್ಕೆ ಅಗೋಚರವಾಗಿ ಉಳಿಯಬೇಕಾದರೆ ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಚಿಹ್ನೆಗಳು ಹೇಗೆ ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಬಹುದು ಎಂಬುದನ್ನು ಈ ತಂತ್ರವು ಎತ್ತಿ ತೋರಿಸುತ್ತದೆ.
ನಾವು a ನ ಬಳಕೆಯನ್ನು ಸಹ ಅನ್ವೇಷಿಸಿದ್ದೇವೆ ವರ್ಗ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ವಿಧಾನಗಳನ್ನು ಹೆಚ್ಚು ಔಪಚಾರಿಕವಾಗಿ ಪ್ರತ್ಯೇಕಿಸಲು. ಈ ವಿಧಾನವು ಒಂದೇ ರಚನೆಯೊಳಗೆ ಡೇಟಾ (ಪ್ರಾಪರ್ಟೀಸ್) ಮತ್ತು ನಡವಳಿಕೆ (ವಿಧಾನಗಳು) ಎರಡನ್ನೂ ಆವರಿಸುವ ಮೂಲಕ ವಸ್ತು-ಆಧಾರಿತ ತತ್ವಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ ಮಾಡುತ್ತದೆ. ಈ ವಿಧಾನವು ವಸ್ತುವಿನ ಮರುಬಳಕೆ ಮತ್ತು ಮಾರ್ಪಾಡುಗಳನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ, ಮರು-ಬರೆಯುವ ಕೋಡ್ ಇಲ್ಲದೆಯೇ ಡೆವಲಪರ್ಗಳು ವರ್ಗದ ಅನೇಕ ನಿದರ್ಶನಗಳನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಬಳಕೆ Object.keys() ವರ್ಗ ವಿಧಾನದೊಳಗೆ ಗುಣಲಕ್ಷಣಗಳು ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ನಿರ್ವಹಣೆ ಮತ್ತು ಕೋಡ್ ಓದುವಿಕೆ ಎರಡನ್ನೂ ಹೆಚ್ಚಿಸುತ್ತದೆ.
ನಮ್ಮ ಪರಿಹಾರದ ಅಂತಿಮ ಭಾಗವು ಪರೀಕ್ಷೆಯ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ ಜೆಸ್ಟ್, ಜನಪ್ರಿಯ JavaScript ಪರೀಕ್ಷಾ ಚೌಕಟ್ಟು. ನಮ್ಮ ಪುನರಾವರ್ತನೆಯ ವಿಧಾನಗಳು ವಿಭಿನ್ನ ಅಳವಡಿಕೆಗಳಲ್ಲಿ ನಿರೀಕ್ಷೆಯಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಾವು ಘಟಕ ಪರೀಕ್ಷೆಗಳನ್ನು ಬರೆದಿದ್ದೇವೆ. ಸಂಕೀರ್ಣ ವಸ್ತುಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಸಂಭಾವ್ಯ ದೋಷಗಳು ಅಥವಾ ಅನಿರೀಕ್ಷಿತ ನಡವಳಿಕೆಯನ್ನು ಗುರುತಿಸಲು ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಮುಂತಾದ ಕಾರ್ಯಗಳನ್ನು ಬಳಸುವುದು ಪರೀಕ್ಷೆ () ಮತ್ತು ನಿರೀಕ್ಷಿಸಿ () ಜೆಸ್ಟ್ನಲ್ಲಿ ನಮ್ಮ ಕೋಡ್ನ ನಿಖರತೆಯನ್ನು ಮೌಲ್ಯೀಕರಿಸುವುದು ಮಾತ್ರವಲ್ಲದೆ ಸಂಪೂರ್ಣ ಪರೀಕ್ಷೆಯನ್ನು ಪ್ರೋತ್ಸಾಹಿಸುವ ಮೂಲಕ ಸಾಫ್ಟ್ವೇರ್ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ.
ವಿಧಾನಗಳನ್ನು ಪ್ರಭಾವಿಸದೆ ವಸ್ತು ಗುಣಲಕ್ಷಣಗಳ ಮೂಲಕ ಪುನರಾವರ್ತನೆ
ಡೈನಾಮಿಕ್ ಫ್ರಂಟ್-ಎಂಡ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಈ ಪರಿಹಾರವು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ. ಇದು ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯನ್ನು ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ವಸ್ತು-ಆಧಾರಿತ ವಿನ್ಯಾಸ ಮಾದರಿಗಳನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ, ವಿಧಾನಗಳು ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
// Solution 1: Using Object.defineProperty to Hide Methods from Iteration
const myObj = {};
Object.defineProperty(myObj, 'prop1', { value: 'one', writable: true, enumerable: true });
Object.defineProperty(myObj, 'prop2', { value: 'two', writable: true, enumerable: true });
Object.defineProperty(myObj, 'myMethod', {
value: function() {
Object.keys(this).forEach(prop => {
this[prop] = this[prop].toUpperCase();
});
},
enumerable: false
});
console.log(myObj.prop1, myObj.prop2);
myObj.myMethod();
console.log(myObj.prop1, myObj.prop2);
ವಿಧಾನಗಳನ್ನು ಮರೆಮಾಡಲು ಚಿಹ್ನೆಗಳೊಂದಿಗೆ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಮಾಡ್ಯುಲರ್ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ರಚಿಸುವುದು
ಈ ಪರಿಹಾರವು ಬಳಸುತ್ತದೆ ES6 ಚಿಹ್ನೆಗಳು ಡೈನಾಮಿಕ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ, ರಚನೆಯನ್ನು ಸ್ವಚ್ಛವಾಗಿಟ್ಟುಕೊಂಡು ಎಣಿಸಲಾಗದ ವಿಧಾನಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.
const METHOD_KEY = Symbol('myMethod');
const myObj = {
prop1: 'one',
prop2: 'two',
[METHOD_KEY]: function() {
Object.entries(this).forEach(([key, value]) => {
if (typeof value === 'string') this[key] = value.toUpperCase();
});
}
};
console.log(myObj.prop1, myObj.prop2);
myObj[METHOD_KEY]();
console.log(myObj.prop1, myObj.prop2);
ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ವಿಧಾನಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಪ್ರತ್ಯೇಕ ವರ್ಗವನ್ನು ಬಳಸುವುದು
ಈ ವಿಧಾನವು ತರ್ಕವನ್ನು a ಆಗಿ ಬೇರ್ಪಡಿಸುವ ಮೂಲಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ವಸ್ತು-ಆಧಾರಿತ ತತ್ವಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ವರ್ಗ, ವಿಧಾನಗಳನ್ನು ಗುಣಲಕ್ಷಣಗಳಿಂದ ವಿಭಿನ್ನವಾಗಿ ಇರಿಸುವುದು.
class MyObject {
constructor() {
this.prop1 = 'one';
this.prop2 = 'two';
}
uppercaseProps() {
Object.keys(this).forEach(key => {
this[key] = this[key].toUpperCase();
});
}
}
const obj = new MyObject();
console.log(obj.prop1, obj.prop2);
obj.uppercaseProps();
console.log(obj.prop1, obj.prop2);
ಜೆಸ್ಟ್ನೊಂದಿಗೆ ಪರಿಹಾರಗಳನ್ನು ಪರೀಕ್ಷಿಸುವ ಘಟಕ
ಈ ವಿಭಾಗವು ಬರವಣಿಗೆಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ಘಟಕ ಪರೀಕ್ಷೆಗಳು ಜನಪ್ರಿಯ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪರೀಕ್ಷಾ ಚೌಕಟ್ಟಿನ ಜೆಸ್ಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಮೇಲಿನ ಪರಿಹಾರಗಳ ಸರಿಯಾದತೆಯನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು.
const { test, expect } = require('@jest/globals');
test('Solution 1: Should uppercase properties', () => {
const obj = { prop1: 'one', prop2: 'two' };
Object.keys(obj).forEach(key => obj[key] = obj[key].toUpperCase());
expect(obj.prop1).toBe('ONE');
expect(obj.prop2).toBe('TWO');
});
test('Solution 2: Should uppercase properties using class', () => {
const obj = new MyObject();
obj.uppercaseProps();
expect(obj.prop1).toBe('ONE');
expect(obj.prop2).toBe('TWO');
});
ಸುಧಾರಿತ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮಾದರಿಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಆಬ್ಜೆಕ್ಟ್ ಪುನರಾವರ್ತನೆ ಸವಾಲುಗಳನ್ನು ಪರಿಹರಿಸುವುದು
ನಿರ್ವಹಿಸಲು ಒಂದು ಆಸಕ್ತಿದಾಯಕ ಮಾರ್ಗ ವಸ್ತು-ಆಧಾರಿತ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಸವಾಲುಗಳನ್ನು ಬಳಸುವುದು ಮೂಲಮಾದರಿಗಳು. ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಮೂಲಮಾದರಿಗಳಿಗೆ ಲಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ, ಇದು ಡೆವಲಪರ್ಗಳಿಗೆ ನಿದರ್ಶನಗಳಾದ್ಯಂತ ಹಂಚಿಕೆಯ ವಿಧಾನಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಮೂಲಮಾದರಿಯೊಳಗೆ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ವಿಧಾನಗಳನ್ನು ಇರಿಸುವ ಮೂಲಕ, ಅವರು ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಗೆ ಅಡ್ಡಿಯಾಗುವುದಿಲ್ಲ. ಬಳಸುವಾಗ ವಸ್ತುವಿಗೆ ನೇರವಾಗಿ ಲಗತ್ತಿಸಲಾದ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಮಾತ್ರ ಮಾರ್ಪಡಿಸಲಾಗಿದೆ ಎಂದು ಈ ತಂತ್ರವು ಖಚಿತಪಡಿಸುತ್ತದೆ Object.keys() ಅಥವಾ Object.entries(). ಹೆಚ್ಚುವರಿಯಾಗಿ, ಮೂಲಮಾದರಿಗಳು ಕೋಡ್ ಮರುಬಳಕೆ ಮತ್ತು ಉತ್ತಮ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯನ್ನು ಪ್ರೋತ್ಸಾಹಿಸುತ್ತವೆ.
ಮತ್ತೊಂದು ಶಕ್ತಿಯುತ ವಿಧಾನವೆಂದರೆ ಹತೋಟಿ getter ಮತ್ತು setter ಕಾರ್ಯಗಳು. ಗೆಟರ್ಗಳು ಮತ್ತು ಸೆಟ್ಟರ್ಗಳು ಗುಣಲಕ್ಷಣಗಳೊಂದಿಗೆ ಪರೋಕ್ಷವಾಗಿ ಸಂವಹನ ನಡೆಸಲು ಒಂದು ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ, ಪುನರಾವರ್ತನೆಯ ಸಮಯದಲ್ಲಿ ಅಥವಾ ಪ್ರವೇಶಿಸಿದಾಗ ಅವರ ನಡವಳಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಈ ಮಾದರಿಯೊಂದಿಗೆ, ಡೆವಲಪರ್ಗಳು ಮೀಸಲಾದ ಕಾರ್ಯಗಳ ಮೂಲಕ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ನಮ್ಯತೆಯನ್ನು ನೀಡುವಾಗ ವಿಧಾನಗಳ ಉದ್ದೇಶವಿಲ್ಲದ ಮಾರ್ಪಾಡುಗಳನ್ನು ತಡೆಯಬಹುದು. ಈ ಪರಿಹಾರವು ಬಳಕೆದಾರರಿಗೆ ಕ್ಲೀನ್ API ಅನ್ನು ನಿರ್ವಹಿಸುವಾಗ ಆಬ್ಜೆಕ್ಟ್ ಗುಣಲಕ್ಷಣಗಳು ಸುತ್ತುವರಿದಿರುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಕೊನೆಯದಾಗಿ, ಡೆವಲಪರ್ಗಳು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಬಹುದು Object.freeze() ಅಥವಾ Object.seal() ವಸ್ತುವಿನ ರೂಪಾಂತರವನ್ನು ನಿರ್ವಹಿಸಲು. Object.freeze() ಒಂದು ವಸ್ತುವನ್ನು ಬದಲಾಗದಂತೆ ಮಾಡುತ್ತದೆ, ಅದರ ಗುಣಲಕ್ಷಣಗಳಿಗೆ ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ತಡೆಯುತ್ತದೆ, ಆಕಸ್ಮಿಕ ಮಾರ್ಪಾಡುಗಳಿಲ್ಲದೆ ನೀವು ಡೇಟಾವನ್ನು ಓದಲು ಬಯಸುವ ಸಂದರ್ಭಗಳಲ್ಲಿ ಇದು ಉಪಯುಕ್ತವಾಗಿರುತ್ತದೆ. ಮತ್ತೊಂದೆಡೆ, Object.seal() ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಗುಣಲಕ್ಷಣಗಳನ್ನು ನವೀಕರಿಸಲು ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ ಹೊಸದನ್ನು ಸೇರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ಈ ಮಾದರಿಗಳು ಕೋಡ್ ಸಮಗ್ರತೆಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುವುದಲ್ಲದೆ ವಸ್ತು ನಡವಳಿಕೆಗಳ ಮೇಲೆ ಕಟ್ಟುನಿಟ್ಟಾದ ನಿಯಂತ್ರಣವನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತದೆ, ಪುನರಾವರ್ತನೆಯನ್ನು ಸುರಕ್ಷಿತ ಮತ್ತು ಹೆಚ್ಚು ಊಹಿಸಬಹುದಾದಂತೆ ಮಾಡುತ್ತದೆ.
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಪುನರಾವರ್ತನೆಯ ಗುಣಲಕ್ಷಣಗಳ ಬಗ್ಗೆ ಪದೇ ಪದೇ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು
- ವಿಧಾನಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದೆ ವಸ್ತು ಗುಣಲಕ್ಷಣಗಳ ಮೂಲಕ ನೀವು ಹೇಗೆ ಪುನರಾವರ್ತಿಸುತ್ತೀರಿ?
- ನೀವು ಬಳಸಬಹುದು Object.keys() ಎಣಿಕೆ ಮಾಡಬಹುದಾದ ಗುಣಲಕ್ಷಣಗಳ ಮೇಲೆ ಮಾತ್ರ ಪುನರಾವರ್ತಿಸಲು ಮತ್ತು ಬಳಸುವ ಮೂಲಕ ವಿಧಾನಗಳನ್ನು ತಪ್ಪಿಸಲು Object.defineProperty() ಎಣಿಸಬಹುದಾದ ಧ್ವಜವನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ false.
- ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಮೂಲಮಾದರಿಗಳನ್ನು ಬಳಸುವುದರಿಂದ ಏನು ಪ್ರಯೋಜನ?
- ಮೂಲಮಾದರಿಗಳು ಬಹು ನಿದರ್ಶನಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲಾದ ವಿಧಾನಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಮತ್ತು ವಿಧಾನಗಳು ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯೊಂದಿಗೆ ಮಧ್ಯಪ್ರವೇಶಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
- ಪಡೆಯುವವರು ಮತ್ತು ಸೆಟ್ಟರ್ಗಳು ವಸ್ತು ನಿರ್ವಹಣೆಯನ್ನು ಹೇಗೆ ಸುಧಾರಿಸುತ್ತಾರೆ?
- ಗೆಟರ್ಗಳು ಮತ್ತು ಸೆಟ್ಟರ್ಗಳು ಗುಣಲಕ್ಷಣಗಳಿಗೆ ನಿಯಂತ್ರಿತ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತವೆ, ಡೆವಲಪರ್ಗಳು ಆಸ್ತಿ ಮೌಲ್ಯಗಳನ್ನು ನೇರವಾಗಿ ಬಹಿರಂಗಪಡಿಸದೆಯೇ ಪರೋಕ್ಷವಾಗಿ ನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ವಸ್ತುವನ್ನು ಹೆಚ್ಚು ಸುರಕ್ಷಿತ ಮತ್ತು ಊಹಿಸಬಹುದಾದಂತೆ ಮಾಡುತ್ತದೆ.
- ನೀವು ಯಾವಾಗ Object.freeze() ಮತ್ತು Object.seal() ಅನ್ನು ಬಳಸಬೇಕು?
- Object.freeze() ಒಂದು ವಸ್ತುವನ್ನು ಬದಲಾಗದಂತೆ ಮಾಡಲು ಬಳಸಲಾಗುತ್ತದೆ Object.seal() ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಗುಣಲಕ್ಷಣಗಳಿಗೆ ನವೀಕರಣಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ ಹೊಸದನ್ನು ಸೇರಿಸುವುದನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ, ಎರಡೂ ವಸ್ತುವಿನ ನಡವಳಿಕೆಯ ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ.
- ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಯನ್ನು ನಿರ್ವಹಿಸಲು ನೀವು ES6 ತರಗತಿಗಳನ್ನು ಬಳಸಬಹುದೇ?
- ಹೌದು, ES6 classes ವಿಧಾನಗಳು ಮತ್ತು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಬೇರ್ಪಡಿಸಲು ಒಂದು ಕ್ಲೀನ್ ರಚನೆಯನ್ನು ಒದಗಿಸಿ, ಮತ್ತು ವರ್ಗದೊಳಗೆ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ವಿಧಾನಗಳು ವಸ್ತುವಿನ ಆಸ್ತಿ ಪುನರಾವರ್ತನೆಗೆ ಅಡ್ಡಿಯಾಗುವುದಿಲ್ಲ.
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಪ್ರಾಪರ್ಟಿ ಮ್ಯಾನೇಜ್ಮೆಂಟ್ ಅನ್ನು ಸುತ್ತಿಕೊಳ್ಳುವುದು
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ವಿಧಾನಗಳನ್ನು ಪ್ರಭಾವಿಸದೆಯೇ ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪುನರಾವರ್ತಿಸಲು ಹಲವಾರು ಮಾರ್ಗಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಎಣಿಸಲಾಗದ ವಿಧಾನಗಳು, ತರಗತಿಗಳು ಮತ್ತು ಮೂಲಮಾದರಿಗಳಂತಹ ತಂತ್ರಗಳು ಡೆವಲಪರ್ಗಳಿಗೆ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ತರ್ಕದ ನಡುವೆ ಸ್ಪಷ್ಟವಾದ ವ್ಯತ್ಯಾಸವನ್ನು ನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಪ್ರತಿ ಪರಿಹಾರವು ಸಂಭಾವ್ಯ ಅಡ್ಡ ಪರಿಣಾಮಗಳನ್ನು ಕಡಿಮೆ ಮಾಡುವಾಗ ಕೋಡ್ ಓದುವಿಕೆ ಮತ್ತು ಮರುಬಳಕೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದರ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ.
ಚಿಹ್ನೆಗಳು ಅಥವಾ Object.defineProperty ನಂತಹ ಸುಧಾರಿತ ವಿಧಾನಗಳನ್ನು ಬಳಸುವುದು ಡೆವಲಪರ್ಗಳಿಗೆ ಪುನರಾವರ್ತನೆಯ ನಡವಳಿಕೆಯ ಮೇಲೆ ಹೆಚ್ಚಿನ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ. ವಸ್ತುಗಳು ಡೇಟಾ ಮತ್ತು ವಿಧಾನಗಳೆರಡನ್ನೂ ಒಳಗೊಂಡಿರುವ ಡೈನಾಮಿಕ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಈ ಮಾದರಿಗಳು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿವೆ. ಈ ತಂತ್ರಗಳನ್ನು ಅನ್ವಯಿಸುವುದರಿಂದ ವಸ್ತುಗಳನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಇದು ಕ್ಲೀನರ್ ಮತ್ತು ಹೆಚ್ಚು ನಿರ್ವಹಿಸಬಹುದಾದ ಕೋಡ್ಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರಾಪರ್ಟಿ ಪುನರಾವರ್ತನೆ ತಂತ್ರಗಳಿಗೆ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- ವಸ್ತುವಿನ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ಮೂಲಮಾದರಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಸುಧಾರಿತ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ತಂತ್ರಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ. MDN ವೆಬ್ ಡಾಕ್ಸ್ - ಆಬ್ಜೆಕ್ಟ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು
- ES6 ಚಿಹ್ನೆಗಳು ಮತ್ತು ಎಣಿಸಲಾಗದ ಆಬ್ಜೆಕ್ಟ್ ಕೀಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವಲ್ಲಿ ಅವುಗಳ ಪಾತ್ರದ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. MDN ವೆಬ್ ಡಾಕ್ಸ್ - ಚಿಹ್ನೆ
- ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ನ ಕ್ಲಾಸ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅಭ್ಯಾಸಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. JavaScript.info - ತರಗತಿಗಳು
- JavaScript ಕೋಡ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು Jest ಅನ್ನು ಬಳಸುವ ಒಳನೋಟಗಳನ್ನು ನೀಡುತ್ತದೆ. ಜೆಸ್ಟ್ ಅಧಿಕೃತ ದಾಖಲೆ
- ಬಳಕೆಯ ವಿವರಗಳು Object.defineProperty() ಆಸ್ತಿ ಎಣಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು. MDN ವೆಬ್ ಡಾಕ್ಸ್ - Object.defineProperty()