{"product_id":"refactoring-javascript","title":"Refactoring JavaScript: Turning Bad Code Into Good Code","description":"\u003cp\u003eIf your JavaScript is a mess, frameworks can only do so much to help. No matter what framework, \"compiles-to-JS\" language, or library you use, bugs and performance concerns will always be an issue if the underlying quality of your JavaScript is poor. With this hands-on guide, you’ll learn how test and refactor your existing code to help reduce complexity, improve readability, and gain confidence in the codebase.\u003c\/p\u003e\u003cp style=\"text-align: justify; font-family: Arial, Verdana, Geneva, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);\"\u003eAuthor Evan Burchard shows you how to identify areas of bad code, and then takes you through several refactoring methods for improving them. Techniques range from renaming variables to applying principles of functional and object-oriented programming. If you’re motivated to write better JavaScript code either on the frontend or backend, this book is a must.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eUse refactoring to restructure existing code, without changing its behavior\u003c\/li\u003e\n\u003cli\u003eLearn the relationship between refactoring and quality\u003c\/li\u003e\n\u003cli\u003eExplore the many versions of JavaScript in use today\u003c\/li\u003e\n\u003cli\u003eCreate automated tests to confirm that your code works, and find bugs that slip through\u003c\/li\u003e\n\u003cli\u003eLearn how to refactor simple JavaScript structures, functions, and objects\u003c\/li\u003e\n\u003cli\u003eRefactor your codebase by applying object-oriented and functional programming principles\u003c\/li\u003e\n\u003cli\u003eExamine methods for refactoring asynchronous JavaScript\u003c\/li\u003e\n\u003c\/ul\u003e\u003cp\u003eTable of Content\u003c\/p\u003e\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 1What Is Refactoring?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eHow Can You Guarantee Behavior Doesn’tChange?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWhat Is the Point of Refactoring if BehaviorDoesn’t Change?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWhat Is and Isn’t Refactoring\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 2Which JavaScript Are You Using?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eVersions and Specifications\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003ePlatforms and Implementations\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003ePrecompiled Languages\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eFrameworks\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eLibraries\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWhat JavaScript Do You Need?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWhat JavaScript Are We Using?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 3Testing\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Many Whys of Testing\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Many Ways of Testing\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eTools and Processes\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 4Testing in Action\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eNew Code from Scratch\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eNew Code from Scratch with TDD\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eUntested Code and Characterization Tests\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eDebugging and Regression Tests\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 5Basic Refactoring Goals\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eFunction Bulk\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eInputs\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eOutputs\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eSide Effects\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eContext Part 1: The Implicit Input\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eContext Part 2: Privacy\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 6Refactoring Simple Structures\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Code\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eOur Strategy for Confidence\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eRenaming Things\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eUseless Code\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eVariables\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eStrings\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWorking with Arrays: Loops, forEach, map\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 7Refactoring Functions and Objects\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Code (Improved)\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eArray and Object Alternatives\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eTesting What We Have\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eExtracting Functions\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eStreamlining the API with One Global Object\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 8Refactoring Within a Hierarchy\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eAbout “CRUD Apps” and Frameworks\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eLet’s Build a Hierarchy\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eLet’s Wreck Our Hierarchy\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eInheritance and Architecture\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eHas-A Relationships\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eInheritance Antipatterns\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 9Refactoring to OOP Patterns\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eTemplate Method\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eStrategy\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eState\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003enull Object\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapper (Decorator and Adapter)\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eFacade\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 10Asynchronous Refactoring\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWhy Async?\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eFixing the Pyramid of Doom\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eCallbacks and Testing\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003ePromises\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 11Functional Refactoring\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Restrictions and Benefits of FunctionalProgramming\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eThe Basics\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eAdvanced Basics\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eBurritos\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eLearning and Using Burritos\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eMoving from OOP to FP\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eWrapping Up\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003e\u003co:p\u003e \u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eChapter 12Conclusion\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eAppendix Further Reading and Resources\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eOrigins of Refactoring\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eBaseline JavaScript(s)\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eKeeping Up with JavaScript\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eJavaScript Reference\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eObject-Oriented Programs\/Patterns (IncludingAnticlass Stances)\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eAsync\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eFunctional\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eTools\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eNon-JS-Specific but Relevant Sources\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e\u003cp class=\"MsoNormal\" style=\"margin-bottom:0in;margin-bottom:.0001pt;text-align: justify;line-height:normal\"\u003eMe\u003co:p\u003e\u003c\/o:p\u003e\u003c\/p\u003e","brand":"Shroff\/O'Reilly","offers":[{"title":"Default Title","offer_id":50505944629318,"sku":"9789352135417","price":1035.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0754\/2797\/1142\/files\/refactoring-javascript-turning-bad-code-into-good-code-original-imaeu4yhgzfwtwgg.jpg?v=1790315958","url":"https:\/\/cb-india.com\/products\/refactoring-javascript","provider":"Computer Bookshop (India) Pvt Ltd","version":"1.0","type":"link"}