Object-Oriented JavaScript Third Edition Learn everything you need to know about object-oriented JavaScript with this comprehensive guide Enter the world of cutting-edge development! Ved Antani Stoyan Stefanov BIRMINGHAM - MUMBAI Object-Oriented JavaScript Third Edition Copyright © 2017 Packt Publishing All rights reserved No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However, the information contained in this book is sold without warranty, either express or implied Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals However, Packt Publishing cannot guarantee the accuracy of this information First published: July 2008 Second edition: July 2013 Third edition: January 2017 Production reference: 1050117 Published by Packt Publishing Ltd Livery Place 35 Livery Street Birmingham B3 2PB, UK ISBN 978-1-78588-056-8 www.packtpub.com Credits Authors Copy Editor Ved Antani Zainab Bootwala Stoyan Stefanov Reviewer Project Coordinator Mohamed Sanaulla Ritika Manoj Commissioning Editor Proofreader Wilson Dsouza Safis Editing Acquisition Editor Indexer Denim Pinto Rekha Nair Content Development Editor Graphics Arun Nadar Jason Monteiro Technical Editor Production Coordinator Abhishek Sharma Arvindkumar Gupta About the Authors Ved Antani has been building scalable server and mobile platforms using JavaScript, Go, and Java since 2005 He is an associate vice president at Myntra and has previously worked at Electronic Arts and Oracle He is an avid reader and author on several subjects He has studied computer science and currently lives in Bangalore, India Ved is passionate about classical music and loves to spend time with his son Writing this book required a significant investment of my time, and I would like to thank my parents and family for their support and encouragement during those long days and weekends when I was practically invisible Stoyan Stefanov is a Facebook engineer, author, and speaker He talks regularly about web development topics at conferences, and his blog, www.phpied.com He also runs a number of other sites, including JSPatterns.com - a site dedicated to exploring JavaScript patterns Previously at Yahoo!, Stoyan was the architect of YSlow 2.0 and creator of the image optimization tool, Smush.it A "citizen of the world", Stoyan was born and raised in Bulgaria, but is also a Canadian citizen, currently residing in Los Angeles, California In his offline moments, he enjoys playing the guitar, taking flying lessons, and spending time at the Santa Monica beaches with his family I'd like to dedicate this book to my wife, Eva, and my daughters, Zlatina and Nathalie Thank you for your patience, support, and encouragement About the Reviewer Mohamed Sanaulla is a software developer with more than years of experience in developing enterprise applications and Java-based back-end solutions for e-commerce applications His interests include Enterprise software development, refactoring and redesigning applications, designing and implementing RESTful web services, troubleshooting Java applications for performance issues, and TDD He has strong expertise in Java-based application development, ADF (JSF-based JavaEE web framework), SQL, PL/SQL, JUnit, designing RESTful services, Spring, Struts, Elasticsearch, and MongoDB He is also a Sun Certified Java Programmer for the Java platform He is a moderator for JavaRanch.com He likes to share findings on his blog (http ://sanaulla.info) www.PacktPub.com For support files and downloads related to your book, please visit www.PacktPub.com Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy Get in touch with us at service@packtpub.com for more details At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks https://www.packtpub.com/mapt Get the most in-demand software skills with Mapt Mapt gives you full access to all Packt books and video courses, as well as industry-leading tools to help you plan your personal development and advance your career Why subscribe? Fully searchable across every book published by Packt Copy and paste, print, and bookmark content On demand and accessible via a web browser Customer Feedback Thank you for purchasing this Packt book We take our commitment to improving our content and products to meet your needs seriously that's why your feedback is so valuable Whatever your feelings about your purchase, please consider leaving a review on this book's Amazon page Not only will this help us, more importantly it will also help others in the community to make an informed decision about the resources that they invest in to learn You can also review for us on a regular basis by joining our reviewers' club If you're interested in joining, or would like to learn more about the benefits we offer, please contact us: customerreviews@packtpub.com Table of Contents Preface Chapter 1: Object-Oriented JavaScript A bit of history Browser wars and renaissance The present The future ECMAScript Strict mode in ES6 ECMAScript Browser support for ES6 Babel Object-oriented programming Objects Classes Encapsulation Aggregation Inheritance Polymorphism OOP summary Setting up your training environment WebKit's web inspector JavaScriptCore on a Mac More consoles Summary Chapter 2: Primitive Data Types, Arrays, Loops, and Conditions Variables Variables are case sensitive Operators Primitive data types Finding out the value type – the typeof operator Numbers Octal and hexadecimal numbers Binary Literals Exponent literals 10 11 12 12 13 13 15 16 16 17 18 18 19 19 20 21 22 24 26 27 27 29 30 33 34 35 35 36 37 Infinity NaN Number.isNaN Number.isInteger Strings String conversions Special strings String template literals Booleans Logical operators Operator precedence Lazy evaluation Comparison Undefined and null Symbols Primitive data types recap Arrays Adding/updating array elements Deleting elements Arrays of arrays Conditions and loops Code blocks The if condition The else clause Checking if a variable exists Alternative if syntax Switch Don't forget to break Loops While loops Do-while loops For loops For…in loops Comments Exercises Summary Chapter 3: Functions 38 39 40 40 41 42 43 44 46 46 48 49 50 52 53 54 55 56 57 57 59 59 60 60 61 63 64 65 65 66 67 67 70 71 71 72 73 What is a function? Calling a function Parameters Default parameters Rest parameters Spread operators 74 74 75 77 78 79 [ ii ] .. .Object- Oriented JavaScript Third Edition Learn everything you need to know about object- oriented JavaScript with this comprehensive guide Enter... that return objects Passing objects Comparing objects Objects in the WebKit console Logging using the console.log method ES6 object literals Object properties and attributes ES6 object methods... Built-in Objects 427 430 Object Members of the Object constructor The Object. prototype members ECMAScript additions to objects ES6 addition to objects Property shorthand Computed property names Object. assign