uz
Feedback
ToCode

ToCode

Kanalga Telegram鈥檇a o鈥榯ish

讟讬驻讬诐 拽爪专讬诐 诇诪转讻谞转讬诐 诪讗转 讬谞讜谉 驻专拽

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
ToCode
1 419
# 诇讱 讘注拽讘讜转 讛专讬讞 讗讞讚 讛讚讬诪讜讬讬诐 讛讗讛讜讘讬诐 注诇讬讬 讛讜讗 讛讘讬讟讜讬 Code Smell: 讻诪讜 砖讬砖 诇讚讘专讬诐 诪拽讜诇拽诇讬诐 专讬讞 砖诪注讬讚 注诇 讝讛, 讻讱 诇诪讘谞讬诐 诪住讜讬诪讬诐 讘拽讜讚 讬砖 专讬讞 讜讻砖讗谞讞谞讜 谞转拽诇讬诐 讘专讬讞 讛讝讛 讻讚讗讬 诇讞驻砖 诪讛 诪拽讜诇拽诇 (讗讜 讛讜诇讱 诇讛转拽诇拽诇). 讜讛住讬讘讛 砖讞砖讜讘 诇讛讻讬专 讗转 讛专讬讞讜转 讛砖讜谞讬诐 砖诇 讛拽讜讚 讛讬讗 砖专讬讞 砖诇 拽讜讚 注讜讝专 诇谞讜 诇诪爪讜讗 讘讗讙讬诐 讛专讘讛 讬讜转专 诪讛专. 讻砖讗讬谉 诇讱 诪讜砖讙 诪讛 讛诪讞砖讘 专讜爪讛 诪诪讱 讛转讞诇讛 讟讜讘讛 讛讬讗 诇诇讻转 讗讞专讬 讛专讬讞. 讘住讬驻讜专 讛砖讘讜注 注讝专转讬 诇诇拽讜讞 诇讙诇讜转 诇诪讛 讘拽讜谞驻讬讙讜专爪讬讛 诪住讜讬诪转 转讜讻谞讬转 讛讘讚讬拽讜转 诇讗 专爪讛. 诪讛专 诪讗讜讚 讝讬讛讬谞讜 砖讬砖 住驻专讬讛 诪住讜讬诪转 砖讻砖讟讜注谞讬诐 讗讜转讛 讘住讘讬讘转 讛讘讚讬拽讜转 讛讻诇 诪转驻讜爪抓, 诇诪专讜转 砖讻砖讟讜注谞讬诐 讗转 讗讜转讛 讛住驻专讬讛 讘拽讜谞驻讬讙讜专爪讬讛 讛专讙讬诇讛 讛讻诇 注讜讘讚 诪注讜诇讛. 砖注讛 讜拽爪转 诪讗讜讞专 讬讜转专 驻转讞谞讜 讗转 拽讜讚 讛住驻专讬讛 诪转讜讱 转讬拽讬讬转 node_modules 讻讚讬 诇诪爪讜讗 讘讛 讗转 讛砖讜专讛:
export * from "./Components/Icon/Icon";
讜-讘讜诐. 诪讛 驻转讗讜诐 讬砖 export 讘住驻专讬讛 讘 node_modules? 住驻专讬讜转 诪讙讬注讜转 诇砖诐 讗讞专讬 砖诪驻注讬诇讬诐 注诇讬讛谉 Babel. 诇砖讬诐 住驻专讬讛 诇驻谞讬 Babel 讘 node_modules 讘讟讜讞 砖讜讘专 诪砖讛讜 讘讛讙讚专讜转 砖诇 诪讬砖讛讜. 讜讗讻谉 讞讬驻讜砖 拽爪专 讘拽讘爪讬 讛讛讙讚专讜转 讛专讗讛 砖转讜讻谞讬转 讛讘讚讬拽讛 诇讗 诪专讬爪讛 Babel 注诇 node_modules 讜讝讛 诪讛 砖专讬住拽 讗转 讛讻诇.

ToCode
1 419
# 专讬讗拽讟, 讻诇讬诐 讗讜讟讜诪讟讬讬诐 讜 Strict Mode 讗谞讬 诇讗 转诪讬讚 诪谞住讛 讗转 讛讚讜讙诪讗讜转 讘讘讬转 诇驻谞讬 砖讗谞讬 诪爪讬讙 讗讜转谉 讘拽讜专住讬诐, 讗讘诇 讛驻注诐 讗谞讬 砖诪讞 砖讘讚拽转讬 诇驻谞讬 砖讚讬讘专转讬 - 讜讙诐 诇诪讚转讬 诪砖讛讜 讞讚砖 注诇 讻诇讬诐 讗讜讟讜诪讟讬讬诐. 讛住讬驻讜专 讘拽爪专讛 讛讜讗 专讬讗拽讟 讜讗谞讬 诪拽讜讜讛 砖讗转诐 讛拽讜专讗讬诐 讬讜讚注讬诐 砖专讬讗拽讟 诪转谞讛讙 诪爪讞讬拽 讻砖讗谞讞谞讜 讻讜转讘讬诐 驻注诪讬讬诐 驻拽讜讚转 setState 讘专爪祝 讘讗讜转讛 驻讜谞拽爪讬讛 诇讚讜讙诪讛 讘拽讜诪驻讜谞谞讟讛 讛讘讗讛:
function Counter(props) {
    const [count, setCount] = useState(0);
    
    console.count("Counter::render");
    
    function handleClick() {
        setCount(c => c + 1);
        setCount(c => c + 1);
    }
    
    return <button onClick={handleClick}>Clicks: {count}</button>;
}

讛转讜爪讗讛 讘拽讜谞住讜诇 爪专讬讻讛 诇讛讬讜转 讛讚驻住讛 驻注诐 讗讞转 砖诇 讛讟拽住讟 Counter::render, 诇诪专讜转 砖拽专讗谞讜 诇 setCount 驻注诪讬讬诐. 讝讛 拽讜专讛 讘讙诇诇 砖 React 诪讞讻讛 注诐 讛注讚讻讜谉 注讚 砖讻诇 驻拽讜讚讜转 讛 set 讬讬讙诪专讜. 讗讘诇 讗诐 讛住讬驻讜专 讛讬讛 谞讙诪专 讻讗谉 诇讗 讛讬讛 诪讛 诇讛讻讬谉 讚讜讙诪讛 注诇讬讜; 诪讛 砖诪注谞讬讬谉 讘专讬讗拽讟 讝讛 砖讗诐 讛拽讜讚 讛讬讛 谞拽专讗 讻转讜爪讗讛 诪 setTimeout 讘诪拽讜诐 讻转讜爪讗讛 诪诇讞讬爪讛 注诇 讻驻转讜专, 讗讝 专讬讗拽讟 讻讘专 讻谉 讛讬讛 拽讜专讗 诇 render 驻注诪讬讬诐 讘诪拽讜诐 诇讗讞讚 讗转 讛 set-讬诐 (讛转谞讛讙讜转 诪转讜注讚转 讜注诐 讛讘讟讞讛 诇讗讬 转讗讬诪讜转 讘注转讬讚 - 讻诇讜诪专 讗诇 转讘谞讜 注诇 讝讛 砖讝讛 讬讬砖讗专 讻讻讛). 讗讘诇 讗谞讞谞讜 诇讗 讻讗谉 讘砖讘讬诇 诇讚讘专 注诇 专讬讗拽讟 讗诇讗 注诇 讛讚讜讙诪讛 砖诇讬 砖诇讗 注讘讚讛. 诇讗 诪砖谞讛 讻诪讛 讛转讗诪爪转讬 讛拽讜诪驻讜谞谞讟讛 砖诇讬 讛讚驻讬住讛 注诇 讛诪住讱 Counter::render 驻注诪讬讬诐!. 讘讚讬讜拽 讻砖讞砖讘转讬 诇讜讜转专 讛诇讻转讬 诇讛注讬祝 诪讘讟 讘拽讜讚 砖诇 index.js 砖谞讜爪专 讗讜讟讜诪讟讬转 注诐 create-react-app:
  ReactDOM.render(
     <React.StrictMode>
       {app}
     </React.StrictMode>,
    document.getElementById('root')
  );
讛讞讘专讬诐 砖诇谞讜 讘驻讬讬住讘讜拽 讻诇 讻讱 讚讜讗讙讬诐 砖诇讗 谞注砖讛 讟注讜讬讜转 砖讛诐 讛讜住讬驻讜 讻讘专讬专转 诪讞讚诇 讗转 StrictMode 诇讻诇 讗驻诇讬拽爪讬讛 讞讚砖讛. 讛诐 专拽 砖讻讞讜 诇爪讬讬谉 砖: > StrictMode renders components twice (on dev but not production) in order to detect any problems with your code and warn you about them (which can be quite useful). 讛诇拽讞 讛讞砖讜讘 讻讗谉 讗诐 讙诐 讗转诐 诪诇诪讚讬诐 转讻谞讜转 - 转诪讬讚 转讘讚拽讜 讗转 讛讚讜讙诪讗讜转 砖诇讻诐 讘讘讬转 诇驻谞讬 砖诪专讗讬诐 诇讻讬转讛 (讙诐 讗诐 讛专讗讬转诐 讗转 讛讚讜讙诪讛 讛讝讗转 诇讻讬转讜转 讗讞专讜转 注砖专讜转 驻注诪讬诐). 讗祝 驻注诐 讗讬 讗驻砖专 诇讚注转 诪讬 讬讝讬讝 诇讻诐 讗转 讛讙讘讬谞讛.

ToCode
1 419
# 砖谞讬 住讜讙讬 砖讬拽讜诇讬诐 专讜讘 砖驻讜转 讛转讻谞讜转 讜专讜讘 讛驻专讬讬诪讜讜专拽讬诐 诪讘讬讗讬诐 讗讬转诐 诇砖讜诇讞谉 讘爪讚 讛讬转专讜谞讜转 讙诐 诪讙讘诇讜转 讟讻谞讬讜转 诪住讜讬诪讜转, 诇驻注诪讬诐 讘讻讜讜谞讛 讜诇驻注诪讬诐 讻讬 讻讻讛 讬爪讗. 转讞砖讘讜 注诇 讛 GIL 砖诇 驻讬讬转讜谉: 讘讙诇诇 砖驻讬讬转讜谉 讻转讜讘讛 讻诪讜 砖讛讬讗 讻转讜讘讛 讬砖 诪讙讘诇讛 注诇 住讜讙 讛讚讘专讬诐 砖讗驻砖专 诇注砖讜转 讘诪拽讘讬诇. 讜讬砖 讙诐 讗讬诇讜爪讬诐 讟讻谞讬讬诐 讬讜转专 注讚讬谞讬诐 诇讚讜讙诪讛 讗谞讞谞讜 讬讜讚注讬诐 砖讘住讬住 谞转讜谞讬诐 注讜讘讚 讟讜讘 讬讜转专 讻砖讛讟讘诇讗讜转 诇讗-注谞拽讬讜转, 讜诇讻谉 讘讛专讘讛 诪注专讻讜转 诪注讘讬专讬诐 谞转讜谞讬诐 讛讬住讟讜专讬讬诐 诇讟讘诇讛 讗讞专转. 讘拽讜讚 讛砖讗讬诇转讛 讗谞讞谞讜 诪住转讻诇讬诐 注诇 讛转讗专讬讱 讜诇驻讬 讝讛 诪讞诇讬讟讬诐 诪讗讬讝讛 讟讘诇讗讜转 诇诪砖讜讱 讗转 讛谞转讜谞讬诐. 讘专讜专 砖讛讬讛 讬讜转专 拽诇 诇砖诪讜专 讗转 讻诇 讛谞转讜谞讬诐 讘讗讜转讛 讟讘诇讛, 讗讘诇 讗谞讞谞讜 诪转讙诪砖讬诐 讘砖讘讬诇 诇注讝讜专 诇讘住讬住 讛谞转讜谞讬诐. 讘谞讜住祝 诇砖讬拽讜诇讬诐 讛讟讻谞讬讬诐, 砖驻讜转 转讻谞讜转 讜驻专讬讬诪讜讜专拽讬诐 专讘讬诐 诪讘讬讗讬诐 诇砖讜诇讞谉 讙诐 砖讬拽讜诇讬诐 住诪谞讟讬讬诐 砖讘转讜专诐 诪讘讬讗讬诐 讗讬转诐 讙诐 讗讬诇讜爪讬诐 讟讻谞讬讬诐 诪住讜讬诪讬诐. 讚讜讙诪讛 诇砖讬拽讜诇 住诪谞讟讬 讛讬讗 诪砖转谞讛 驻专讟讬 讘转讜讱 诪讞诇拽讛. 诇诪砖转谞讛 讻讝讛 讬砖 住诪谞讟讬拽讛 诪住讜讬诪转 砖讗讜诪专转 砖讗谞讞谞讜 诪爪驻讬诐 砖讬砖谞讜 讗讜转讜 专拽 诪转讜讱 讛诪讞诇拽讛 讘讛 讛讜讗 讛讜讙讚专, 讜诇驻注诪讬诐 讬砖 讙诐 讗讬诇讜爪讬诐 讟讻谞讬讬诐 砖诪讙讬注讬诐 注诐 讝讛 诇讚讜讙诪讛 讘砖驻讜转 诪住讜讬诪讜转 爪专讬讱 诪讗讜讚 诇讛转讗诪抓 讘砖讘讬诇 诇砖谞讜转 注专讱 砖诇 诪砖转谞讛 驻专讟讬 诪讞讜抓 诇诪讞诇拽讛 (讜讘砖驻讜转 诪住讜讬诪讜转 讝讛 讻诇诇 诇讗 讗驻砖专讬). 讻砖讗谞讞谞讜 诪转诇讘讟讬诐 讗讬讱 诇诪诪砖 驻讬爪'专 诪住讜讬诐 讞砖讜讘 诇砖讬诐 诇讘 诇讛转诇讘讟讜讬讜转 讜诇砖讬拽讜诇讬诐 讜诇讛讘讚讬诇 讘讬谉 砖谞讬 讛住讜讙讬诐, 讻讬 讻诇 住讜讙 诪讬讬爪专 砖讬讞讛 讗讞专转: 1. 讻砖讗谞讬 讘讜谞讛 讗转 讛拽讜讚 讘爪讜专讛 诪住讜讬诪转 讘讙诇诇 讗讬诇讜抓 讟讻谞讬, 诪住驻讬拽 砖诪讬砖讛讜 讬专讗讛 诇讬 砖讬讟讛 诇注拽讜祝 讗转 讛讗讬诇讜抓 讛讟讻谞讬 讻讚讬 砖讗住讻讬诐 诇讘讞讜谉 诪讬诪讜砖讬诐 讗讞专讬诐. 讗诐 诪讞专 讬讙讬注 讘住讬住 谞转讜谞讬诐 砖注讜讘讚 讟讜讘 注诐 讟讘诇讗讜转 讘讻诇 讙讜讚诇 (讗讜 砖诪驻爪诇 讘注爪诪讜 讗转 讛诪讬讚注 讘诇讬 诇住驻专 诇讬), 讗谞讬 讗砖诪讞 诇讜讜转专 注诇 讛诪谞讙谞讜谞讬诐 讗爪诇讬 讘诪注专讻转 砖砖讜讘专讬诐 讗转 讛诪讬讚注 讛讛讬住讟讜专讬 诇讟讘诇讗讜转 讬砖谞讜转. 2. 讻砖讗谞讬 讘讜谞讛 讗转 讛拽讜讚 讘爪讜专讛 诪住讜讬诪转 讘讙诇诇 砖讘讗讜驻谉 诪讛讜转讬 讻讱 讛讚讘专讬诐 爪专讬讻讬诐 诇注讘讜讚, 讝讛 讘讻诇诇 诇讗 诪砖谞讛 讗诐 讬砖 讗讜 讗讬谉 讚专讱 讟讻谞讬转 诇注拽讜祝 讗转 讛诪讙讘诇讛. 诇讚讜讙诪讛 讙诐 讗诐 讗谞讬 讬讻讜诇 诇砖谞讜转 注专讱 砖诇 诪砖转谞讛 驻专讟讬 砖诇 诪讞诇拽讛 讗讞专转 讜讝讛 讬驻转讜专 诇讬 讗转 讛讘注讬讛, 讗谞讬 讗注讚讬祝 诇讘讞讜专 驻讬转专讜谉 讗讞专 砖讛讜诇讱 讬讚 讘讬讚 注诐 讛住诪谞讟讬拽讛 砖诇 讛拽讜讚. 讛讟注讜讬讜转 讛讻讬 拽砖讜转 讘注讘讜讚讛 注诐 驻专讬讬诪讜讜专拽讬诐 谞讜讘注讜转 诪讘诇讘讜诇 讘讬谉 砖谞讬 住讜讙讬 讛讗讬诇讜爪讬诐. 专拽 讘讙诇诇 砖诪爪讗转 讚专讱 诇注砖讜转 诪砖讛讜 诇讗 讗讜诪专 砖讝讗转 讛讚专讱 讛专爪讜讬讛.

ToCode
1 419
# 讗讬讱 诇讛转诪讜讚讚 注诐 诪讞住讜诐 讻转讬讘讛 讘讗讞讚 讛爪讜讜转讬诐 砖注讘讚转讬 讛讬讜 讗谞砖讬诐 诪诪砖 讞讻诪讬诐, 讬讜转专 诪讚讬 讞讻诪讬诐. 讜讻诇 驻注诐 砖讻转讘转 诪砖讛讜 砖诇讗 讛讬讛 讛讻讬 讬注讬诇 讗讜 讟讜讘 讗讜 注诪讬讚 诇砖讬谞讜讬讬诐 转诪讬讚 讛讬讛 诪讬砖讛讜 砖讬讘讜讗 讜讬讙讬讚 诇讱 砖讛拽讜讚 砖诇讱 诇讗 诪住驻讬拽 讟讜讘 讗讜 诇讗 诪讟驻诇 讘讗讬讝讛 诪拽专讛 砖讗祝 讗讞讚 诇讗 讞砖讘 注诇讬讜. 诇讗讟 诇讗讟 讗谞砖讬诐 讛转讞讬诇讜 诇讛转驻讚讞 诇讻转讜讘 拽讜讚 讞讚砖. 诇驻谞讬 讻诇 驻讬爪'专 讛讬讬谞讜 诪转讬讬注爪讬诐 砖注讜转 讗讬讱 讛讚专讱 讛讻讬 讟讜讘讛 诇讘谞讜转 讗转 讝讛. 讝讛 诇讗 诪谞注 讟注讜讬讜转, 讗讘诇 讝讛 诪谞注 讗转 讛驻讗讚讬讞讛 讻讬 注讻砖讬讜 讗祝 讗讞讚 诇讗 讬讟驻住 注诇讬讱 砖讻转讘转 拽讜讚 诪讛专 诪讚讬 讘诇讬 诇讞砖讜讘 注诇 讻诇 讛诪拽专讬诐. 讘爪讚 讛砖诇讬诇讬 (讜讛爪驻讜讬) 砖诇 讛住讬驻讜专: 讻讜诇谞讜 驻讬转讞谞讜 诪讞住讜诐 讻转讬讘讛. 诇驻谞讬 讻诇 驻讬爪'专 讞讚砖 讚讬讘专谞讜 砖注讜转, 诇讗 讛爪诇讞谞讜 诇注诪讜讚 讘讝诪谞讬诐 讜讛诪注专讻转 讛讬转讛 讻诇 讻讱 诪讛讜谞讚住转 诇讞砖讜讘 注诇 讛讻诇 砖讗讬 讗驻砖专 讛讬讛 讙诐 诇砖谞讜转 砖讜诐 讚讘专 诪专讜讘 诪讞诇拽讜转 讜诪讞砖讘讜转 注诇 讛注转讬讚. 讛讚专讱 讛讻讬 讟讜讘讛 诇讛转诪讜讚讚 注诐 诪讞住讜诐 讻转讬讘讛 讛讬讗 驻砖讜讟 诇讻转讜讘. 讛讚讘专 讛讻讬 讙专讜注 砖讬拽专讛 讝讛 砖谞爪讟专讱 诇诪讞讜拽 讗转 诪讛 砖讻转讘谞讜 讜诇讻转讜讘 诪讞讚砖 讜拽讜讚 砖讻讜转讘讬诐 讗讜转讜 诪讞讚砖 专拽 诪砖转驻专. 讗讞专讬 砖讻讜转讘讬诐 拽讜讚 诪讞讚砖 3-4 驻注诪讬诐 讗转诐 讛专讘讛 讬讜转专 诪讜讻谞讬诐 诇讞砖讜讘 注诇 讻诇 讛诪拽专讬诐 讜诇讟驻诇 讘讛诐 诪讗砖专 诇驻谞讬 砖讻转讘转诐 讗转 讛拽讜讚 讘驻注诐 讛专讗砖讜谞讛. 讛讻讬 讟讜讘 诇讗 诇驻转讞 诪讞住讜诪讬 讻转讬讘讛 诪讛讛转讞诇讛. 驻砖讜讟 诇讻转讜讘, 讜诇讻转讜讘 讜诇讻转讜讘. 讜讗诐 讗转诐 转拽讜注讬诐 注诇 讗讞讚? 诪住专讜 讚"砖, 砖讬诪讜 讗讜转讜 讘爪讚 讜转讻转讘讜 讗转 讛讙讬专住讛 讛讻讬 讙专讜注讛 砖诇 讛拽讜讚 砖讗驻砖专. 诪讞专 转砖驻专讜, 诪讞专转讬讬诐 转砖驻专讜 砖讜讘 讜注讚 砖讘讜注 讛讘讗 讛诪讞住讜诐 讬讛讬讛 讝讬讻专讜谉 专讞讜拽.

ToCode
1 419
# 专拽 讗谞讬 讗讬讟讬? 讬砖讘转讬 讛讬讜诐 诪注诇 砖注讛 诇讻转讜讘 4 砖讜专讜转 拽讜讚. 4. 讘讜讗讜 谞讞讝讜专 注讜讚 驻注诐 注诇 讛诪住驻专 讛讝讛: 4 砖讜专讜转. 讘砖注讛. 讜讘讜讗讜 - 讝讛 诇讗 砖讛-4 砖讜专讜转 讛讗诇讛 讬讜讚注讜转 诇诪爪讜讗 讞讬住讜谉 诇拽讜专讜谞讛. 讘住讱 讛讻诇 4 砖讜专讜转 砖注讜砖讜转 诪诪砖 诪诪砖 诪注讟. 讜讗谞讬 讬讜讚注, 砖讘砖驻讛 讗讞专转 讛讬讬转讬 讻讘专 讻讜转讘 讘讝诪谉 讛讝讛 诇驻讞讜转 讞爪讬 诪注专讻转. 讜诇诪讛 讚讜讜拽讗 讘驻专讜讬拽讟 讛讝讛 爪专讬讱 诇讛砖转诪砖 讘讟讻谞讜诇讜讙讬讛 讛讛讬讗 砖讗谞讬 讘讻诇诇 诇讗 诪讻讬专? 讜讗讬讱 讻讜诇诐 诪住讘讬专讬诐 砖讛讟讻谞讜诇讜讙讬讛 讛讝讗转 讛讬讗 讛讚讘专 讛讻讬 诪讚诇讬拽 讘注讜诇诐, 讜讛讬讗 讞讜住讻转 讝诪谉 讜注讜砖讛 讛讻诇 讛专讘讛 讬讜转专 讟讜讘. 讜讗谞讬? 讗谞讬 注讚讬讬谉 注诐 讗讜转谉 4 砖讜专讜转, 讜讻讘专 诪转拽专讘 诇砖注转讬讬诐. 讜诇讗讟 诇讗讟 诪转讞讬诇 诇讞砖讜砖 砖讛讬讜诐 讛讝讛 讛讜诇讱 诇讛住转讬讬诐 注诐 讛专讘讛 驻讞讜转 诪-4 砖讜专讜转, 讜砖讗讜诇讬 讻讚讗讬 诇注爪讜专 注讻砖讬讜 讻诇 注讜讚 讗谞讬 讘驻诇讜住. 讜讗讝 讗谞讬 谞讝讻专- 诇讬诪讜讚 讝讛 诇讗 诇讬谞讗专讬, 讜拽讜讚 讝讛 诇讗 诪驻注诇. 讗转 讛转诪讜谞讛 讛讙讚讜诇讛 专讜讗讬诐 专拽 讗讞专讬 讞讜讚砖讬诐 讗讜 砖谞讬诐 砖诇 注讘讜讚讛 讜诇讬诪讜讚. 讗诇讛 讛讬讜 砖注转讬讬诐 讟讜讘讜转 砖诇 诇讬诪讜讚 讘诇讬 拽砖专 诇讻诪讛 砖讜专讜转 拽讜讚 讻转讘转.

ToCode
1 419
# 讞讬讚转 专讗讬讜谞讜转 注讘讜讚讛: 讛驻讜谞拽爪讬讛 Array.fill 讜讗讜讘讬拽讟讬诐 讘 JavaScript 讛谞讛 砖讗诇讛 驻砖讜讟讛 讘砖讘讬诇讻诐 砖讘讻讬祝 讗驻砖专 诇砖讗讜诇 讘专讗讬讜谞讜转 注讘讜讚讛 讗讜 讘诪住讬讘讜转 (诇诪专讜转 砖转讻诇'住 讗讬谉 讬讜转专 诪住讬讘讜转 注讻砖讬讜 注诐 讛拽讜专讜谞讛, 讜讙诐 专讗讬讜谞讜转 注讘讜讚讛 讛诐 讛专讘讛 驻讞讜转 讻讬驻讬讬诐). 讗谞讞谞讜 讬讜讚注讬诐 砖讛驻讜谞拽爪讬讛 Array.prototype.fill 诪诪诇讗转 诪注专讱 讘注专讱 砖谞注讘讬专 诇讛, 讜诇讻谉 讛拽讜讚 讛讘讗 诪讞讝讬专 40:
new Array(4).fill(10).reduce((acc, val) => acc + val);
讜讗谞讞谞讜 讙诐 讬讜讚注讬诐 砖讗驻砖专 诇砖谞讜转 讞诇拽 诪讛注专讻讬诐 讗讞专讬 砖讛驻注诇谞讜 fill 讻讱 砖诇讚讜讙诪讛 讛拽讜讚 讛讘讗 讬讞讝讬专 50:
const data = new Array(4).fill(10);
data[0] += 10;

data.reduce((acc, val) => acc + val);
讗讘诇 诪讛 讬拽专讛 讗诐 谞谞住讛 诇注砖讜转 讗转 讗讜转讜 讟专讬拽 注诐 讗讜讘讬拽讟讬诐... 诪讛 讬讞讝讬专 讛拽讜讚 讛讘讗? 讜诇诪讛?
data.reduce((acc, val) => acc + val.value, 0)

ToCode
1 419
# 拽诇 讜驻砖讜讟 驻砖讜讟 讜诪讜专讻讘 讛诐 砖谞讬 拽爪讜讜转 砖诇 住拽讗诇讛: 讚讘专讬诐 驻砖讜讟讬诐 讘谞讜讬讬诐 诪诪注讟 讞诇拽讬诐 讜诪注讟 拽砖专讬诐 讘讬谞讬讛诐, 讚讘专讬诐 诪讜专讻讘讬诐 讘谞讜讬讬诐 诪讛专讘讛 讞诇拽讬诐 注诐 拽砖专讬诐 诪住讜讘讻讬诐 讘讬谞讬讛诐. 讝讛 讗讜讘讬拽讟讬讘讬 讜讘专 讛砖讜讜讗讛. 讻砖诪住转讻诇讬诐 注诇 砖谞讬 讚讘专讬诐 讗驻砖专 诇拽讬讬诐 讚讬讜谉 诪讬 诪讛诐 讬讜转专 驻砖讜讟 讜诪讬 讬讜转专 诪讜专讻讘. 诇讚讜讙诪讛 讗讜驻谞讬讬诐 讞砖诪诇讬讬诐 讛诐 讬讜转专 诪讜专讻讘讬诐 诪讗讜驻谞讬讬诐 专讙讬诇讬诐, 讜讗讜驻谞讬讬诐 专讙讬诇讬诐 讛诐 讬讜转专 诪讜专讻讘讬诐 诪住拽讬讬讟讘讜专讚. 砖讬讞转 讟诇驻讜谉 讛讬讗 诪砖诪注讜转讬转 讬讜转专 诪讜专讻讘转 诪砖诇讬讞转 诪讻转讘, 讜诇砖诇讜讞 诪讻转讘 讝讛 诪讜专讻讘 讬讜转专 诪诇讚驻讜拽 诇诪讬砖讛讜 讘讚诇转. 讻讻诇 砖讬砖 诇讬 讬讜转专 诪注专讻讜转 砖诪砖讞拽讜转 讬讞讚 讜讛转讬讗讜诐 讘讬谞讬讛谉 讬讜转专 谞讜拽砖讛 讻讱 谞讙讬讚 砖讛诪注专讻转 讬讜转专 诪讜专讻讘转. 拽诇 讜拽砖讛 讝讛 住讬驻讜专 讗讞专 诇讙诪专讬: 讙诐 讛诐 拽爪讜讜转 砖诇 住拽讗诇讛 讗讘诇 讛驻注诐 讛住拽讗诇讛 讛讬讗 住讜讘讬讬拽讟讬讘讬转. 诇讬 讛专讘讛 讬讜转专 拽诇 诇拽专讜讗 驻讜住讟 诪拽爪讜注讬 诪讗砖专 诇专讗讜转 讜讬讚讗讜 砖诪住讘讬专 讘讚讬讜拽 讗转 讗讜转讜 讚讘专 讜讗谞讬 诪讻讬专 讛诪讜谉 讗谞砖讬诐 砖拽诇 诇讛诐 讬讜转专 注诐 讛讜讬讚讗讜. 讗谞讬 讬讻讜诇 诇讛转讜讜讻讞 注讚 诪讞专 注诐 讛讞讘专 砖讗讜讛讘 讜讬讚讗讜 注诇 诇诪讛 讟拽住讟 讬讜转专 谞讜讞, 讗讘诇 讘住讜祝 诇讻诇 讗讞讚 讬砖 讗转 讛讚专讱 砖拽诇讛 诇讜. 讛讗讘讞谞讛 讘讬谉 拽诇 诇驻砖讜讟 诪讗讜讚 讞砖讜讘讛 讻砖讘讜谞讬诐 诪注专讻讜转 转讜讻谞讛, 诪砖转讬 住讬讘讜转: 1. 讘讻转讬讘转 诪注专讻转 讞讚砖讛 讗讜 驻讬爪'专 讞讚砖 讻诪注讟 转诪讬讚 讘转讞讬诇转 讛讚专讱 讬讛讬讛 诇谞讜 讬讜转专 拽诇 诇讘谞讜转 诪注专讻转 讬讜转专 诪讜专讻讘转 (讻讬 讗谞讬 驻砖讜讟 讝讜专拽 驻谞讬诪讛 驻专讬讬诪讜讜专拽 讜诪讜住讬祝 诪诇讞, 讘诪拽讜诐 诇讘谞讜转 讗转 讛讚讘专 讛讻讬 诪讚讜讬拽 讜驻砖讜讟 注讘讜专讬), 讗讘诇 讘诪注专讻讜转 讜讜转讬拽讜转 讛专讘讛 讬讜转专 拽诇 诇转讞讝拽 讜诇讛诪砖讬讱 诇驻转讞 诪注专讻转 驻砖讜讟讛 (讻砖讬砖 驻讞讜转 拽砖专讬诐 讘讬谉 讛讞诇拽讬诐 拽诇 讬讜转专 诇讛讞诇讬祝 讞诇拽 讗讜 讻诪讛 讞诇拽讬诐). 2. 讘砖讬讞讛 注诐 诪转讻谞转讬诐 讗讞专讬诐 讗讬谉 砖讜诐 讟注诐 诇拽讬讬诐 讚讬讜谉 注诇 讗讬讝讛 讙讬砖讛 转讛讬讛 讬讜转专 拽诇讛 - 拽诇 讝讛 住讜讘讬讬拽讟讬讘讬 诇讙诪专讬. 诇注讜诪转 讝讗转 讗驻砖专 讘讛讞诇讟 诇讛转诇讘讟 讗讬讝讛 讗专讻讬讟拽讟讜专讛 转讛讬讛 驻砖讜讟讛 讬讜转专. 讝讛 讘住讚专 诇讜讜转专 注诇 讛驻砖讟讜转 讻讚讬 诇讘谞讜转 诪注专讻转 讬讜转专 诪讛专. 讬砖 诇讬 讞讘专 砖讘讗讜驻谉 拽讘讜注 讘讜谞讛 讻讻讛 诪注专讻讜转 讜讝讜专拽 讗讜转谉 讗讞专讬 砖谞转讬讬诐 讻砖讛拽讜讚 谞讛讬讛 诪住讜讘讱 诪讚讬 讜拽爪讘 讛驻讬转讜讞 讬讜专讚. 讜讝讛 讙诐 讘住讚专 讙诪讜专 诇拽讞转 讗转 讛讙讬砖讛 讛讛驻讜讻讛 讜诇讛转讗诪抓 诇讘谞讜转 诪注专讻转 驻砖讜讟讛 讘诪讟专讛 砖诇讗 谞爪讟专讱 诇砖讻转讘 诇注讜诇诐. 讻谉 讞砖讜讘 诇讛讬讜转 讘专讜专讬诐 诇讙讘讬 讛诪讟专讜转 砖诇谞讜 注诐 注爪诪谞讜 讜注诐 砖讗专 讛爪讜讜转 讜诇诪讚讜讚 讻讚讬 诇讜讜讚讗 砖讛讙讬砖讛 砖讘讞专谞讜 讘讗诪转 注讜讘讚转 注讘讜专谞讜. (讜转讜讚讛 诇专讬拽 讛讬拽讬 注诇 讛讛砖专讗讛 讜诇讜讬讟讗诇讬 砖砖讬讻谞注 讗讜转讬 诇讛拽砖讬讘 诇讜).

ToCode
1 419
# 诪转讬 诇讛砖转诪砖 讘住驻专讬讛 讞讚砖讛 专讜讘 讛诪转讻谞转讬诐 (讗谞讬 讻诇讜诇), 讻砖讛诐 砖讜诪注讬诐 注诇 住驻专讬讛 讞讚砖讛 诪讬讚 讛诐 讞讜砖讘讬诐 "讜讜讗讜 讗讬讝讛 诪讚诇讬拽! 讗谞讬 讞讬讬讘 诇谞住讜转 讗转 讝讛". 讜讗讝 讗谞讞谞讜 讛讜诇讻讬诐 诇驻专讜讬拽讟 砖诇谞讜 (讻讬 砖诐 讛拽讜讚), 诪讜住讬驻讬诐 讗转 讛住驻专讬讛 讛讞讚砖讛 (讻讬 谞讜 讞讬讬讘讬诐 诇谞住讜转), 注讜砖讬诐 讗转 讻诇 讛讟注讜讬讜转 讛讗驻砖专讬讜转 (讻讬 谞讜 讗诇 转讛讬讜 讻讘讚讬诐 讗谞讬 注诐 讛住驻专讬讛 讛讝讗转 讬讜诪讬讬诐 注讚讬讬谉 诇讗 诪讘讬谉 讗转 讛讚讘专讬诐 注讚 讛住讜祝) 讜讗讝 诪诪砖讬讻讬诐 住讘讬讘 讝讛 诇讘谞讜转 注讜讚 拽讜讚 诇驻专讜讬拽讟. 讛转讜爪讗讛? 诪讛专 诪讗讜讚 驻专讜讬拽讟讬诐 讛讜驻讻讬诐 诇讘诇转讬 讗驻砖专讬讬诐 诇转讞讝讜拽讛 讜讗诇驻讬 诪转讻谞转讬诐 诪诪讜专诪专讬诐 诪住转讜讘讘讬诐 讘注讜诇诐 讜诪诪诇诪诇讬诐 "讗讜祝 讛专讬讚讗拽住 讛讝讛", "专讬讬诇住 讝讛 讻讝讛 讘诇讗讙谉", "讗讬谉 诪爪讘 砖讗谞讬 谞讜讙注 讘 Java 砖讜讘", "诇讗 诪讘讬谉 诪讛 讻讜诇诐 诪转诇讛讘讬诐 诪 Node.JS" 讜注讜讚 讗讬谞住驻讜专 拽讬讟讜专讬诐. 讛讘注讬讛 讻诪讜讘谉 诇讗 讘讟讻谞讜诇讜讙讬讛. 讛讘注讬讛 讛讬讗 砖砖讬诇讘转诐 讘诪注专讻转 讻诇讬 讘诇讬 砖讛讘谞转诐 讗讜转讜 注讚 讛住讜祝 讜讗讜诇讬 讘诇讬 砖讗驻讬诇讜 讛讬讬转诐 爪专讬讻讬诐 讗讜转讜. 讛驻讬转专讜谉 驻砖讜讟 讗讱 拽砖讛 诇讬讬砖讜诐: 讗谞讞谞讜 爪专讬讻讬诐 诇讛驻专讬讚 讘讬谉 砖诇讘 讛诇讬诪讜讚 诇注讘讜讚讛 讛讗诪讬转讬转. 讗谞讞谞讜 爪专讬讻讬诐 诇诪爪讜讗 讚专讱 诇砖讞拽 注诐 讟讻谞讜诇讜讙讬讛 讘诇讬 诇砖讘讜专 诇注爪诪谞讜 讗转 讛驻专讜讬拽讟, 讜讛讻讬 讞砖讜讘, 讗谞讞谞讜 爪专讬讻讬诐 诇砖诇讘 住驻专讬讛 讞讚砖讛 讗讜 讻诇讬 讞讚砖 讘拽讜讚 专拽 讻砖讛诪注专讻转 谞诪爪讗转 讘砖诇讘 砖讘讗诪转 爪专讬讱 讗转 讛住驻专讬讛 讛讝讜. 谞.讘. 讙讬专住讛 讬讜转专 注讚讬谞讛 砖注讜砖讬诐 讙诐 诪转讻谞转讬诐 讬讞住讬转 讗讞专讗讬讬诐 谞砖诪注转 讻讻讛: 讗谞讬 爪专讬讱 诇讛讜住讬祝 诪谞讙谞讜谉 Drag & Drop 诇诪注专讻转, 讗谞讬 诇讗 讬讜讚注 讻诇讜诐 注诇 DnD 讗讝 讗讞驻砖 讘专砖转 住驻专讬讛 拽讬讬诪转 砖诇 DnD 诇专讬讗拽讟, 讗谞讬 专讜讗讛 砖讬砖 讛专讘讛 讛转诇讛讘讜转 诪 React DnD 讗讝 讗砖诇讘 讗讜转讛 讗爪诇讬 讘驻专讜讬拽讟. 讝讜 讘讚讬讜拽 讗讜转讛 讛讟注讜转 讻诪讜 诇砖诇讘 讗转 Vue 讘诪注专讻转 专拽 讘讙诇诇 砖专爪讬转诐 诇诇诪讜讚 Vue. 专拽 讘讙诇诇 砖讗转讛 爪专讬讱 诪谞讙谞讜谉 Drag and Drop 诇讗 讗讜诪专 砖讗转讛 爪专讬讱 讚讜讜拽讗 讗转 住驻专讬讬转 React DnD.

ToCode
1 419
# 诪讻讘讛 讗转 讛讬讚 诇诪专讜转 砖讛讘讬讟讜讬 Hands Off 诪讜专讻讘 诪讛诪讬诇讬诐 Hands 讜 Off, 讗谞讞谞讜 诇讗 讞讜砖讘讬诐 砖讻砖诪讬砖讛讜 Hands Off 讗转 讛讞讘讬诇讛 诇讞讘专 砖诇讜 讛讜讗 注砖讛 诪砖讛讜 砖拽砖讜专 诇讻讬讘讜讬 讗讜 诇讬讚讬讬诐. 讛讜讗 驻砖讜讟 诪住专 讗转 讛讞讘讬诇讛. 讗诐 讗转诐 诇讗 诪讻讬专讬诐 讗转 讛讘讬讟讜讬 讜诪讻讬专讬诐 专拽 讗转 讛诪讬诇讬诐 Hands 讜 Off 转爪讟专讻讜 讛专讘讛 讚讬诪讬讜谉 讘砖讘讬诇 诇讛讘讬谉 讗讜转讜. 讗讘诇, 讛讘讞讬专讛 讜讛讬讻讜诇转 诇讛砖转诪砖 讘诪讬诇讬诐 讘爪讜专讛 砖诇讗 讞砖讘谞讜 注诇讬讛 拽讜讚诐 讛讬讗 讗讞转 讛诪讬讜诪谞讜讬讜转 讛诇砖讜谞讬讜转 讛讞砖讜讘讜转, 讜讙诐 讗讞转 讛诪讬讜诪谞讜讬讜转 讛讞砖讜讘讜转 讘转讻谞讜转. 讛专讘讛 驻注诪讬诐 诪转讻谞转讬诐 诪专讙讬砖讬诐 砖讛诐 讻讘专 "讬讜讚注讬诐" 诪讛 讝讛 诪注专讱 讗讜 诪讛 讝讛 Hash; 诪讛 讛讬讗 驻讜谞拽爪讬讛 讜诪讛 讛讬讗 诪讞诇拽讛 讜讗讬讱 讗讘谞讬 讛讘谞讬讬谉 讛讗诇讛 诪住转讚专讜转 讬讞讚. 讬讜转专 诪讝讛 讗讞专讬 砖讗谞讞谞讜 诪专讙讬砖讬诐 砖讛讘谞讜 讗转 讛注谞讬讬谉 讘砖驻讛 讗讞转 讗谞讞谞讜 讘讟讜讞讬诐 砖讗谞讞谞讜 讬讜讚注讬诐 讗讬讱 诇讛砖转诪砖 讘讗讜转诐 诪讘谞讬诐 讙诐 讘砖驻讜转 讗讞专讜转. 讗讘诇, 讘讚讬讜拽 讻诪讜 讘砖驻讜转, 讗诐 转讙讬讚讬 诪讞专 诇诪讬砖讛讜 "诇讗 爪专讬讱 诇讚讞讜祝 讗转 住讘转讗 诇转讜讱 讛住专驻讚讬诐" 讛讜讗 讻谞专讗讛 诇讗 讬讘讬谉 砖讛转讻讜讜谞转 砖讛讜讗 诪讙讝讬诐. 诇讻诇 砖驻讛 讬砖 讗转 爪讬专讜驻讬 讛诪讬诇讬诐 砖诇讛 讜讞讬讘讜专讬诐 砖注讜讘讚讬诐 讘砖驻讛 讗讞转 诪讗讘讚讬诐 诪砖诪注讜转 讻砖注讜讘专讬诐 诇砖驻讛 讗讞专转. 讻砖讗谞讞谞讜 诇讜诪讚讬诐 砖驻讛 讞讚砖讛, 讗讜 专讜爪讬诐 诇讛砖转驻专 讘砖驻讛 砖讗谞讞谞讜 讻讘专 诪讻讬专讬诐, 砖讜讜讛 诇讛砖拽讬注 讬讜转专 讝诪谉 讘诇诪爪讜讗 讗讬讱 诇讛砖转诪砖 讘爪讜专讛 讬爪讬专转讬转 讘诪讬诇讬诐 砖讗谞讞谞讜 讞讜砖讘讬诐 砖讗谞讞谞讜 诪讻讬专讬诐. "诇讗 讬讚注转讬 砖讗驻砖专 诇注砖讜转 讗转 讝讛 注诐 驻讜谞拽爪讬讜转", 讝讛 诪砖驻讟 砖讻讚讗讬 诇讛讙讬讚 讬讜转专, 诇讗 诪砖谞讛 讗讬讝讜 砖驻讛 讗转诐 诇讜诪讚讬诐.

ToCode
1 419
# 讗讬讱 诇拽讘诇 专砖讬诪讛 砖诇 砖诪讜转 讻诇 讛驻讜谞拽爪讬讜转 诪讗讜讘讬拽讟 JavaScript 诇讙'讗讜讜讛住拽专讬驻讟 讬砖 诪讜讚诇 讬专讜砖讛 诪注谞讬讬谉 砖谞拽专讗 讬专讜砖转 Prototype. 讝讛 讗讜诪专 砖诇讻诇 讗讜讘讬拽讟 讘诪注专讻转 讬砖 讗转 讛 Prototype 砖诇讜 (讜诇驻专讜讟讜讟讬讬驻 讬讻讜诇 讙诐 诇讛讬讜转 驻专讜讟讜讟讬讬驻 诪砖诇讜) 讜讻讱 谞讜爪专转 砖专砖专转 讗专讜讻讛 讻诪讛 砖谞专爪讛. 讘讻诇 驻注诐 砖讗谞讞谞讜 诪谞住讬诐 诇讙砖转 诇砖讚讛 诪住讜讬诐 讘讗讜讘讬拽讟 讘讗讜驻谉 讗讜讟讜诪讟讬 讙'讗讜讜讛住拽专讬驻讟 诪讞驻砖 讗转 讛砖讚讛 讛讝讛 讘讻诇 砖专砖专转 讛驻专讜讟讜讟讬讬驻讬诐 讜诪讞讝讬专 讗转 讛注专讱 讛专讗砖讜谉 砖讛讜讗 诪讜爪讗. 讘讻诇 驻注诐 砖讗谞讞谞讜 讬讜爪专讬诐 class 讘 JavaScript 讘讗讜驻谉 讗讜讟讜诪讟讬 谞讜爪专 驻专讜讟讜讟讬讬驻 讜诪拽讜砖专 诇讻诇 讗讜讘讬拽讟 讞讚砖 砖讬讜讜爪专 诪讛拽诇讗住 讛讝讛. 讘讻诇 驻注诐 砖诪讞诇拽讛 讬讜专砖转 诪诪讞诇拽讛 讗讞专转 转讬讜讜爪专 砖专砖专转 砖诇 砖谞讬 驻专讜讟讜讟讬讬驻讬诐 诇讻诇 讗讜讘讬拽讟 砖谞讜爪专 诪讛诪讞诇拽讛 讛讬讜专砖转 (讜讻讱 讛诇讗讛 讙诐 注诐 讬专讜砖讛 讬讜转专 讗专讜讻讛). 讛驻讜谞拽爪讬讛 Object.create 诪讗驻砖专转 诇讛讙讚讬专 讗讜讘讬拽讟 讞讚砖 注诐 驻专讜讟讜讟讬讬驻 诪住讜讬诐 砖讗谞讞谞讜 诪注讘讬专讬诐 诇讛 讘转讜专 驻专诪讟专. 讜讛驻讜谞拽爪讬讛 Object.getPrototypeOf 诪讞讝讬专讛 讗转 讛驻专讜讟讜讟讬讬驻 砖诇 讗讜讘讬拽讟 诪住讜讬诐. 讘讜讗讜 谞专讗讛 讗转 讝讛 讘驻注讜诇讛 注诐 拽爪转 拽讜讚. 拽讜讚诐 讻诇 诪讞诇拽讛 讘讜讚讚转:
class A {
  hello() {
    console.log('hello world');
  }
}

const a = new A();

const prototypeOfA = Object.getPrototypeOf(a);

// This works
a.hello();

delete(prototypeOfA.hello);

// But this doesn't
a.hello();
讗驻砖专 诇专讗讜转 砖讻砖讗谞讬 诪讜讞拽 讗转 讛诪讗驻讬讬谉 hello 诪讛驻专讜讟讜讟讬讬驻 砖诇 讛讗讜讘讬拽讟, 讗谞讬 讻讘专 诇讗 讬讻讜诇 诇讛驻注讬诇 讗转 讛驻讜谞拽爪讬讛 hello 砖诇 讛讗讜讘讬拽讟. 诇注讜诪转 讝讗转 讗诐 讗谞讬 诪谞住讛 诇诪讞讜拽 讗转 讛驻讜谞拽爪讬讛 hello 诪讛讗讜讘讬拽讟 a 注爪诪讜 讗讬谉 砖讜诐 讘注讬讛 诇讛诪砖讬讱 诇拽专讜讗 诇讛 (讻讬 诪诪讬诇讗 讛讬讗 诇讗 讛讬转讛 砖诪讜专讛 注诇 a):
class A {
  hello() {
    console.log('hello world');
  }
}

const a = new A();

const prototypeOfA = Object.getPrototypeOf(a);

// This works
a.hello();

delete(a.hello);

// And this works too
a.hello();
讗驻砖专 诇注砖讜转 诪砖讞拽讬诐 讬讜转专 诪转讜讞讻诪讬诐 注诐 Object.create:
const a = { one: '1' };
const b = Object.create(a);
const c = Object.create(b);

// All 3 work:
console.log(a.one);
console.log(b.one);
console.log(c.one);

b.two = '2';

// undefined
console.log(a.two);

// these two work:
console.log(b.two);
console.log(c.two);

c.three = '3';
// undefined
console.log(a.three);
console.log(b.three);

// but this works
console.log(c.three);
讻诇 驻注诐 砖讗谞讬 诪讜住讬祝 讗讜 诪讜专讬讚 诪讗驻讬讬谉 诪讗讜讘讬拽讟, 讛诪讗驻讬讬谉 讛讝讛 "讝诪讬谉" 讙诐 讘讻诇 讛讗讜讘讬拽讟讬诐 砖谞诪爪讗讬诐 讘诪讜专讚 砖专砖专转 讛驻专讜讟讜讟讬讬驻讬诐. 注讻砖讬讜 诇砖讗诇讛 - 讗讬讱 诇拽讘诇 专砖讬诪讛 砖诇 砖诪讜转 讻诇 讛驻讜谞拽爪讬讜转 诪讗讜讘讬拽讟 JavaScript? 谞讜 讗讝 讘讛转讞砖讘 讘讻诇 诪讛 砖讻转讘谞讜 注诇 驻专讜讟讜讟讬讬驻讬诐, 讗转诐 讻讘专 讘讟讞 诪讘讬谞讬诐 砖讛砖讗诇讛 讛讝讗转 拽爪转 讬讜转专 诪转讜讞讻诪转 诪讛谞讬住讜讞 讛专讗砖讜谞讬 砖诇讛. 专砖讬诪转 讻诇 讛驻讜谞拽爪讬讜转 砖讬砖 注诇 讛讗讜讘讬拽讟 讻讜诇诇转 讙诐 讗转 讻诇 讛驻讜谞拽爪讬讜转 诪讛驻专讜讟讜讟讬讬驻 砖诇讜, 讜讗转 讗诇讛 诪讛驻专讜讟讜讟讬讬驻 砖诇 讛驻专讜讟讜讟讬讬驻 讜讻讱 讛诇讗讛. 诇诪讝诇谞讜 讘 JavaScript 讬砖 驻讜谞拽爪讬讛 讘砖诐 Object.getOwnPropertyNames 砖诪讞讝讬专讛 讗转 专砖讬诪转 讻诇 讛诪讗驻讬讬谞讬诐 砖诇 讗讜讘讬拽讟 诪住讜讬诐. 砖讬诇讜讘 砖诇讛 注诐 Object.getPrototypeOf 讬驻转讜专 诇谞讜 讗转 讛讘注讬讛 注诐 诇讜诇讗讛 驻砖讜讟讛:
function getAllMethodNames(obj) {
  let res = [];
  let p = obj;

  while (p !== Object.getPrototypeOf({})) {
    const ownKeys = Object.getOwnPropertyNames(p);
    const ownMethods = ownKeys.filter(n => n !== 'constructor').filter(n => typeof p[n] === 'function');
    res = [...res, ...ownMethods];
    p = Object.getPrototypeOf(p);
  }

  return res;
}
讜讻讱 讗谞讬 讬讻讜诇 诇讛砖转诪砖 讘驻讜谞拽爪讬讛 讻讚讬 诇拽讘诇 讗转 砖诪讜转 讻诇 讛驻讜谞拽爪讬讜转 讘诪讞诇拽讛 诪住讜讬诪转:
class A {
  hello() {
    console.log('Hello world');
  }
}

class B extends A {
  byebye() {
    console.log('bye');
  }
}


const a = new A();
const b = new B();

console.log(getAllMethodNames(a));
console.log(getAllMethodNames(b));
讛拽讜讚 讬讚驻讬住 转讞讬诇讛 讗转 hello, 讘讙诇诇 砖讝讜 讛驻讜谞拽爪讬讛 讛讬讞讬讚讛 讘诪讞诇拽讛 A, 讜讗讝 讘砖讜专讛 讞讚砖讛 讗转 hello 讜 byebye 砖讛谉 砖转讬 讛驻讜谞拽爪讬讜转 砖讗驻砖专 诇讛驻注讬诇 注诇 讛讗讜讘讬拽讟 b 诪讛诪讞诇拽讛 B.