Object-Oriented JavaScript - Second Edition

Object-Oriented JavaScript - Second Edition
eBook: $29.99
Formats: PDF, PacktLib, ePub and Mobi formats
save 20%!
Print + free eBook + free PacktLib access to the book: $79.98    Print cover: $49.99
save 37%!
Free Shipping!
UK, US, Europe and selected countries in Asia.
Also available on:
Table of Contents
Sample Chapters
  • Think in JavaScript
  • Make object-oriented programming accessible and understandable to web developers
  • Apply design patterns to solve JavaScript coding problems
  • Learn coding patterns that unleash the unique power of the language
  • Write better and more maintainable JavaScript code
  • Type in and play around with examples that can be used in your own scripts

Book Details

Language : English
Paperback : 382 pages [ 235mm x 191mm ]
Release Date : July 2013
ISBN : 1849693129
ISBN 13 : 9781849693127
Author(s) : Stoyan Stefanov, Kumar Chetan Sharma
Topics and Technologies : All Books, Web Development, Web Development

Table of Contents

Chapter 1: Object-oriented JavaScript
Chapter 2: Primitive Data Types, Arrays, Loops, and Conditions
Chapter 3: Functions
Chapter 4: Objects
Chapter 5: Prototype
Chapter 6: Inheritance
Chapter 7: The Browser Environment
Chapter 8: Coding and Design Patterns
Appendix A: Reserved Words
Appendix B: Built-in Functions
Appendix C: Built-in Objects
Appendix D: Regular Expressions
  • Chapter 1: Object-oriented JavaScript
    • A bit of history
      • Browser wars and renaissance
      • The present
      • The future
    • ECMAScript 5
    • 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
        • Exponent literals
        • Infinity
          • NaN
      • Strings
        • String conversions
        • Special strings
      • Booleans
      • Logical operators
        • Operator precedence
        • Lazy evaluation
      • Comparison
        • Undefined and null
      • Primitive data types recap
      • Arrays
        • Adding/updating array elements
        • Deleting elements
        • Arrays of arrays
      • Conditions and loops
        • The if condition
        • The else clause
      • Code blocks
        • Checking if a variable exists
        • Alternative if syntax
      • Switch
      • Loops
        • While loops
          • Do-while loops
        • For loops
        • For-in loops
      • Comments
      • Summary
      • Exercises
      • Chapter 3: Functions
        • What is a function?
          • Calling a function
          • Parameters
          • Predefined functions
            • parseInt()
            • parseFloat()
            • isNaN()
            • isFinite()
            • eval()
        • Scope of variables
          • Variable hoisting
        • Functions are data
          • Anonymous functions
          • Callback functions
            • Callback examples
          • Immediate functions
          • Inner (private) functions
          • Functions that return functions
          • Function, rewrite thyself!
        • Closures
          • Scope chain
          • Breaking the chain with a closure
            • Closure #1
            • Closure #2
            • A definition and closure #3
          • Closures in a loop
          • Getter/setter
          • Iterator
        • Summary
        • Exercises
        • Chapter 4: Objects
          • From arrays to objects
            • Elements, properties, methods, and members
            • Hashes and associative arrays
            • Accessing an object's properties
            • Calling an object's methods
            • Altering properties/methods
            • Using the this value
            • Constructor functions
            • The global object
            • The constructor property
            • The instanceof operator
            • Functions that return objects
            • Passing objects
            • Comparing objects
            • Objects in the WebKit console
              • console.log
          • Built-in objects
            • Object
            • Array
              • A few array methods
            • Function
              • Properties of function objects
              • Methods of function objects
              • The arguments object revisited
              • Inferring object types
            • Boolean
            • Number
            • String
              • A few methods of string objects
            • Math
            • Date
              • Methods to work with date objects
            • RegExp
              • Properties of RegExp objects
              • Methods of RegExp objects
              • String methods that accept regular expressions as arguments
              • search() and match()
              • replace()
              • Replace callbacks
              • split()
              • Passing a string when a RegExp is expected
              • Error objects
          • Summary
          • Exercises
          • Chapter 5: Prototype
            • The prototype property
              • Adding methods and properties using the prototype
            • Using the prototype's methods and properties
              • Own properties versus prototype properties
              • Overwriting a prototype's property with an own property
                • Enumerating properties
              • isPrototypeOf()
              • The secret __proto__ link
            • Augmenting built-in objects
              • Augmenting built-in objects – discussion
              • Prototype gotchas
            • Summary
            • Exercises
            • Chapter 6: Inheritance
              • Prototype chaining
                • Prototype chaining example
                • Moving shared properties to the prototype
              • Inheriting the prototype only
                • A temporary constructor – new F()
              • Uber – access to the parent from a child object
              • Isolating the inheritance part into a function
              • Copying properties
              • Heads-up when copying by reference
              • Objects inherit from objects
              • Deep copy
              • object()
              • Using a mix of prototypal inheritance and copying properties
              • Multiple inheritance
                • Mixins
              • Parasitic inheritance
              • Borrowing a constructor
                • Borrow a constructor and copy its prototype
              • Summary
              • Case study – drawing shapes
                • Analysis
                • Implementation
                • Testing
              • Exercises
              • Chapter 7: The Browser Environment
                • Including JavaScript in an HTML page
                • BOM and DOM – an overview
                • BOM
                  • The window object revisited
                  • window.navigator
                  • Your console is a cheat sheet
                  • window.location
                  • window.history
                  • window.frames
                  • window.screen
                  • window.open()/close()
                  • window.moveTo() and window.resizeTo()
                  • window.alert(), window.prompt(), and window.confirm()
                  • window.setTimeout() and window.setInterval()
                  • window.document
                • DOM
                  • Core DOM and HTML DOM
                  • Accessing DOM nodes
                    • The document node
                    • documentElement
                    • Child nodes
                    • Attributes
                    • Accessing the content inside a tag
                    • DOM access shortcuts
                    • Siblings, body, first, and last child
                    • Walk the DOM
                  • Modifying DOM nodes
                    • Modifying styles
                    • Fun with forms
                  • Creating new nodes
                    • DOM-only method
                    • cloneNode()
                    • insertBefore()
                  • Removing nodes
                  • HTML-only DOM objects
                    • Primitive ways to access the document
                    • document.write()
                    • Cookies, title, referrer, domain
                • Events
                  • Inline HTML attributes
                  • Element Properties
                  • DOM event listeners
                  • Capturing and bubbling
                  • Stop propagation
                  • Prevent default behavior
                  • Cross-browser event listeners
                  • Types of events
                • XMLHttpRequest
                  • Sending the request
                  • Processing the response
                  • Creating XMLHttpRequest objects in IE prior to Version 7
                  • A is for Asynchronous
                  • X is for XML
                  • An example
                • Summary
                • Exercises
                • Chapter 8: Coding and Design Patterns
                  • Coding patterns
                    • Separating behavior
                      • Content
                      • Presentation
                      • Behavior
                      • Example of separating behavior
                      • Asynchronous JavaScript loading
                    • Namespaces
                      • An Object as a namespace
                      • Namespaced constructors
                      • A namespace() method
                    • Init-time branching
                    • Lazy definition
                    • Configuration object
                    • Private properties and methods
                    • Privileged methods
                    • Private functions as public methods
                    • Immediate functions
                    • Modules
                    • Chaining
                    • JSON
                  • Design patterns
                    • Singleton
                    • Singleton 2
                      • Global variable
                      • Property of the Constructor
                      • In a private property
                    • Factory
                    • Decorator
                      • Decorating a Christmas tree
                    • Observer
                  • Summary
                    • Appendix C: Built-in Objects
                      • Object
                        • Members of the Object constructor
                        • The Object.prototype members
                        • ECMAScript 5 additions to Object
                      • Array
                        • The Array.prototype members
                        • ECMAScript 5 additions to Array
                      • Function
                        • The Function.prototype members
                        • ECMAScript 5 additions to a function
                      • Boolean
                      • Number
                        • Members of the Number constructor
                        • The Number.prototype members
                      • String
                        • Members of the String constructor
                        • The String.prototype members
                        • ECMAScript 5 additions to String
                      • Date
                        • Members of the Date constructor
                        • The Date.prototype members
                        • ECMAScript 5 additions to Date
                      • Math
                        • Members of the Math object
                      • RegExp
                        • The RegExp.prototype members
                      • Error objects
                        • The Error.prototype members
                      • JSON
                        • Members of the JSON object

                      Stoyan Stefanov

                      Stoyan Stefanov is a Facebook engineer, author, and speaker. He talks regularly about web development topics at conferences and his blog www.phpied.com, and 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.

                      Kumar Chetan Sharma

                      Kumar Chetan Sharma studied to be an electronics engineer and has always wanted to build an ultimate sound system. He then, by chance, got a part time job as a trainee HTML guy. From there he picked up CSS and JavaScript and there was no looking back. It was the time when JavaScript was used to validate forms or create fancy DHTML effects and IE6 was the only browser the world knew. He has been developing web applications since then, using LAMP stack. He has worked on white label social networking applications to web control panels for telecom and networked electrical charger infrastructures. He currently works as a frontend engineer for Yahoo! Search.

                      Sorry, we don't have any reviews for this title yet.

                      Submit Errata

                      Please let us know if you have found any errors not listed on this list by completing our errata submission form. Our editors will check them and add them to this list. Thank you.


                      - 5 submitted: last submission 17 Jul 2014

                      Errata type: code | Page number: 291 | Errata date: 29th August, 2013

                      The following code snippet:

                      function Logger() {
                        if (Logger.single_instance) {
                          Logger.single_instance = this;
                        return Logger.single_instance;

                      should be:

                      function Logger() {
                        if (!Logger.single_instance) {
                          Logger.single_instance = this;
                        return Logger.single_instance;

                      Errata type: code | Page number: 174 | Errata date: 4th September, 2013

                      The following sentence:

                      The same happens when you call isPropertyOf() on the constructors passing my:

                      Should be:

                      The same happens when you call isPrototypeOf() on the constructors passing my:

                      Errata type: technical | Errata page: 70

                      The URL at the end of the page "http://www.packtpub.com/scr%20ipt.php?q=this%20and%20that" should be "http://www.packtpub.com/script.php?q=this%20and%20that".

                      Errata page: 71

                      The URL at the start the this page "http%3A%2F%2Fwww.packtpub.com%2Fscr%20ipt.php%3Fq%3Dthis%20and%20that" should be 


                      Errata type: Code | Errata page: 184

                      The code is:

                      varTwoDShape = function () {};

                      It should be:

                      var TwoDShape = function () {};

                      Errata type: Code | Errata page: 181

                      Shape.prototype.name = 'Shape';
                      Shape.prototype.toString = function () {
                      varconst = this.constructor;
                      ? this.const.uber.toString() + ', ' + this.name
                      : this.name;

                      Should be:

                      Shape.prototype.toString = function()
                          var constr = this.constructor;
                          return constr.uber
                          ? constr.uber.toString() + ', ' + this.name

                      Sample chapters

                      You can view our sample chapters and prefaces of this title on PacktLib or download sample chapters in PDF format.

                      Frequently bought together

                      Object-Oriented JavaScript - Second Edition +    Node.js Blueprints =
                      50% Off
                      the second eBook
                      Price for both: $43.05

                      Buy both these recommended eBooks together and get 50% off the cheapest eBook.

                      What you will learn from this book

                      • The basics of object-oriented programming, and how to apply it in the JavaScript environment
                      • How to set up and use your training environment (Firebug)
                      • In depth discussion of data types, operators, and flow control statements in JavaScript
                      • In depth discussion of functions, function usage patterns, and variable scope
                      • Understand how prototypes work
                      • Reuse code with common patterns for inheritance
                      • Make your programs cleaner, faster and compatible with other programs and libraries
                      • Use object-oriented JavaScript for improving script performance
                      • Achieve missing object-oriented features in JavaScript

                      In Detail

                      JavaScript is the behavior, the third pillar in today's paradigm that looks at web pages as something that consists of clearly distinguishable parts: content (HTML), presentation (CSS) and behavior (JavaScript). Using JavaScript, you can create not only web pages but also desktop widgets, browser and application extensions, and other pieces of software. It's a pretty good deal: you learn one language and then code all kinds of different applications. While there's one chapter specifically dedicated to the web browser environment including DOM, Events and AJAX tutorials, the rest is applicable to the other environments

                      Many web developers have tried coding or adopting some bits of JavaScript, but it is time to "man up" and learn the language properly because it is the language of the browser and is, virtually, everywhere. This book starts from zero, not assuming any prior JavaScript programming knowledge and takes you through all the in-depth and exciting futures hidden behind the facade.

                      Once listed in the "nice to have" sections of job postings, these days the knowledge of JavaScript is a deciding factor when it comes to hiring web developers. After reading this book you'll be prepared to ace your JavaScript job interview and even impress with some bits that the interviewer maybe didn't know. You should read this book if you want to be able to take your JavaScript skills to a new level of sophistication.


                      You will first be introduced to object-oriented programming, then to the basics of objects in JavaScript. This book takes a do-it-yourself approach when it comes to writing code, because the best way to really learn a programming language is by writing code. You are encouraged to type code into Firebug's console, see how it works and then tweak it and play around with it. There are practice questions at the end of each chapter to help you review what you have learned.

                      Who this book is for

                      For new to intermediate JavaScript developer who wants to prepare themselves for web development problems solved by smart JavaScript!

                      Code Download and Errata
                      Packt Anytime, Anywhere
                      Register Books
                      Print Upgrades
                      eBook Downloads
                      Video Support
                      Contact Us
                      Awards Voting Nominations Previous Winners
                      Judges Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software
                      Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software