SlideShare a Scribd company logo
Getting from Scripts to Applications Donald J. Sipe  |  Refresh Jacksonville  |  November 11 th  2008
JavaScript We are here Pseudoclassical Inheritance Hello World!
JavaScript What we’ll be talking about OOP Basics Scope Closures Context Appling to OOP Constructors Methods Public Private Privileged
But First... Some handy tools Here are some handy things you might not know JavaScript can do: Object-literal notation Anonymous functions Binary assignment Dot-style  and  array-style access of properties
Handy Tools Object Literal Notation— Makes JSON possible // The old way var  myObject = new Object(); myObject.val = “test”; // Using object literal notation var  myObject = {   val: “test” };
Handy Tools Object Literal Notation // The old way var  myArray = new Array(1, 30, “Refresh”); // Using object literal notation var  myArray = [1, 30, “Refresh”];
Handy Tools Anonymous Functions In JavaScript, functions are treated as values, which means: Functions can be assigned to variables Functions can be passed as arguments to other functions
Handy Tools Anonymous Functions // Using an anonymous function as an argument setTimeout(  function  () {   alert( “Refresh” );   }, 1000 ); // Using a function as a variable var  myFunc =  function  () {    alert( “Refresh” );  }; setTimeout(myFunc, 1000);
Handy Tools Anonymous Functions : Building a “scope bubble” Using an anonymous function to wrap code you don’t want in the global scope var  globalVar = “Refresh”;  // Global scope // Create a scope bubble (  function  () {   var  privateVar = “Jacksonville”;   alert( globalVar + “ ” + privateVar ); } )(); alert (privateVar ==  undefined );
Handy Tools Binary Assignment Set a default value only if the variable doesn’t have a value yet // Traditional ternary assignment var  myVar = myVar  ?  myVar  :  0; // Binary assignment var  myVar = myVal || 0;
Handy Tools Dot-Style and Array-Style property access var  sampleObj = {   color: “blue”,   width: “16px” }; // Traditional dot-style access alert( sampleObj.color == “blue” ); // Alternative array-style access alert( sampleObj[“width”] == “16px” );
Scope, Closures, and Context
Scope Only functions have scope.  Blocks ( if ,  while ,  for ,  switch ) do not. All variables are within the global scope unless they are defined within a  function . All global variables actually become properties of the  window   object When variables are  not  declared using the  var   keyword, they decared globally.
Scope var  foo = “orig”;  //  foo  is now a global variable if  ( true ) {   foo = “new”;  // Global  foo  now equals “new” } // create function to modify its own  foo  variable function  test () {   var  foo = “old”; } test(); alert( foo == “new” );  // Global  foo  still equals “new”
Scope If you forget to use the  var   keyword to define a value within a function—even if it’s only used within the function—the value will be defined globally. var  foo = “new”; alert( foo == “new” ); // Omitting the var keyword reverts scope // of  foo  to global level function  badTest () {   foo = “bad news”; } badTest(); // Global  foo  now equals “bad news” alert( foo == “bad news” );
Scope:  Inner Functions Functions can be defined within one another Inner functions have access to the outer function’s variables and parameters. function  getRandomInt(max) {   var  randNum = Math.random() * max;   function  ceil() {   return  Math.ceil(randNum);   }   return  ceil();  // Notice that no arguments are passed } // Alert random number between 1 and 5 alert(getRandomInt(5));
Closures Inner functions maintain the scope they enjoyed when their parent function was called—even  after  the parent function has terminated. This allows you to effectively pass variables to functions that may not be called for some time.
Closures function  delayedAlert (message, delay) {   // Set an enclosed callback   setTimeout(  function  () {   // Use  message  variable passed to outer function   alert(message);   }, delay); } // Display a message with a 5 second delay delayedAlert(“Refresh”, 5000);
Context Your code will always be running within the  context  of another object Context is maintained through the use of the  this  variable. function   increment() {   this .x =  this .x || 0;   return   this .x++; }; alert( increment() == 0 ); alert( increment() == 1 );
Context var  myObject = {   set:  function  (newVal) {  this .val = newVal; } }; alert( myObject.val ==  null  );  //  val  property not set yet myObject.set(“Refresh”); alert( myObject.val == “Refresh” ); //  val  equals “Refresh” // Change the context of  set()  to the window object  window.set = myObject.set;  window.set( “Refresh Jacksonville” ); alert( myObject.val == “Refresh” ); alert( window.val == “Refresh Jacksonville” );
Context:  Changing Contexts JavaScript provides two handy functions for executing a function within the context of another function: call( ) apply( )
Context:  Changing Contexts Using  call()  — Arguments passed by name // Simple function to change the color style of a node function  changeColor (newColor) {   this .style.color = newColor; } // window.changeColor has no  style  property, so call fails changeColor( “red” ); // Grab the DOM node with the id “required” var  reqField = document.getElementById( “required” ); // Call changeColor() within reqField’s context changeColor.call( reqField, “red” );
Context:  Changing Contexts Using  apply()  — Arguments passed as an array // Simple function to change the color style of a node function  changeColor (newColor) {   this .style.color = newColor; } // Set the text color of the body element function setBodyTextColor () {   changeColor.apply( document.body,  arguments  ); } setBodyTextColor( “black” );
Constructors and methods
Object Oriented Programming Now let’s apply all of this information to a more classical view of OOP in JavaScript: Constructors  Object Methods Public Private Privileged
About Objects Almost everything written in JavaScript is an object Objects can be though of as a collection of properties—much like a  hash  in other languages JavaScript doesn’t have a concept of classes like other object-oriented languages Classes are simulated using a concept called  prototypal inheritance
Constructors Like other languages, JavaScript uses the  new   operator to create new instances of objects. // Create User object constructor function  User ( name ) {   this .name = name; } // Create a new instance of a User var  me = new User(“Bob”); // Alert new user’s name alert( me.name == “Bob” ); // Cannot call User directly alert( User.name ==  undefined  ); // window.name is undefined
Methods
Public Methods One way to create a public method—a function that can be freely reference by code outside your object—is to attach it to the object’s  prototype . An object’s  prototype  is a special property that acts as a base reference of your object.  This  prototype  object is copied and applied to all new instances of your object.
Public Methods // Our User object written a different way var  User =  function  (name) {   this .name = name; } // Add a public accessor method for name User. prototype .getName = function () {   return   this .name; } var  me =  new  User( “Bob” ); alert( me.getName() == “Bob” );
Private Methods Private methods are functions that are only accessible to methods  inside  your object and cannot be accessed by external code.
Private Methods // Our User object with some changes var  User =  function  (name) {   this .name = name;   function  welcome () {   alert( “Welcome back, ” +  this .name + “.”);   }   welcome(); } // Create a new User  var  me =  new  User( “Bob” );  // Alerts: “Welcome, Bob.” // Fails because welcome is not a public method me.welcome();
“ Privileged” Methods The term  privileged method  was coined by Douglas Crockford.  It is not a formal construct, but rather a technique. Privileged methods essentially have one foot in the door: Then can access private methods and values within the object They are also publicly accessible
“ Privileged” Methods // Our User object with some tweaks var  User =  function  (name, age) {   var  year = (new Date()).getFullYear() – age;   this .getYearBorn = function () {   return  year;   }; }; // Create a new User  var  me =  new  User( “Bob”, 28 );  // Access privileged method to access private  year  value alert( me.getYearBorn() == 1980 ); // Fails because  year  is private alert( me.year == null );
Grand Finale Using  Scope ,  Closures ,  Contexts , and what we’ve discussed about OOP, we can dynamically generate classes based on information supplied to the constructor.
Grand Finale // Our User object modified to accept an object of properties function  User (properties) {   // Loop through properties and create getter and setter methods   for  (  var  i  in  properties ) {  function  () {   this [“get” + i] =  function  () {   return  properties[i];   };   this [“set” + i] =  function  (val) {   properties[i] = val;   };   })(); } } // Create a new user, automatically creating get and set methods var  me =  new  User( {   name: “Bob”,   age: 28 });
Grand Finale // …continued // Note that  name  is private within  properties alert( me.name ==  null  ); // Access privileged  getname()  method alert( me.getname() == “Bob” ); // Use the dynamically generated setter  // to change the user’s age me.setage(21); alert( me.getage() == 21 );
 
References Pro JavaScript Techniques,   by John Resig Douglas Crockford’s  YUI Theater Presentations http://developer.yahoo.com/yui/theater

More Related Content

What's hot (20)

PDF
Java Script Best Practices
Enrique Juan de Dios
 
PDF
Object Oriented Programming in JavaScript
zand3rs
 
PDF
Advanced javascript
Doeun KOCH
 
PDF
Powerful JavaScript Tips and Best Practices
Dragos Ionita
 
PDF
Core concepts-javascript
Prajwala Manchikatla
 
PDF
JavaScript Basics and Best Practices - CC FE & UX
JWORKS powered by Ordina
 
PPTX
5 Tips for Better JavaScript
Todd Anglin
 
PDF
JavaScript - From Birth To Closure
Robert Nyman
 
PDF
Proxies are Awesome!
Brendan Eich
 
PDF
JavaScript Patterns
Stoyan Stefanov
 
PPT
Effecient javascript
mpnkhan
 
KEY
JavaScript Growing Up
David Padbury
 
PDF
Ten useful JavaScript tips & best practices
Ankit Rastogi
 
KEY
Javascript tid-bits
David Atchley
 
PDF
Prototype
Aditya Gaur
 
PPTX
Javascript basics for automation testing
Vikas Thange
 
ODP
Javascript
theacadian
 
PDF
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
hwilming
 
PDF
Headless Js Testing
Brian Moschel
 
PPTX
Object Oriented Programming In JavaScript
Forziatech
 
Java Script Best Practices
Enrique Juan de Dios
 
Object Oriented Programming in JavaScript
zand3rs
 
Advanced javascript
Doeun KOCH
 
Powerful JavaScript Tips and Best Practices
Dragos Ionita
 
Core concepts-javascript
Prajwala Manchikatla
 
JavaScript Basics and Best Practices - CC FE & UX
JWORKS powered by Ordina
 
5 Tips for Better JavaScript
Todd Anglin
 
JavaScript - From Birth To Closure
Robert Nyman
 
Proxies are Awesome!
Brendan Eich
 
JavaScript Patterns
Stoyan Stefanov
 
Effecient javascript
mpnkhan
 
JavaScript Growing Up
David Padbury
 
Ten useful JavaScript tips & best practices
Ankit Rastogi
 
Javascript tid-bits
David Atchley
 
Prototype
Aditya Gaur
 
Javascript basics for automation testing
Vikas Thange
 
Javascript
theacadian
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
hwilming
 
Headless Js Testing
Brian Moschel
 
Object Oriented Programming In JavaScript
Forziatech
 

Similar to Object Oriented JavaScript (20)

PPTX
Enterprise js pratices
Marjan Nikolovski
 
PPTX
Advance JS and oop
Abuzer Firdousi
 
PDF
Javascript Module Patterns
Nicholas Jansma
 
PDF
Let's JavaScript
Paweł Dorofiejczyk
 
PDF
Uncommon Design Patterns
Stefano Fago
 
PDF
[2015/2016] JavaScript
Ivano Malavolta
 
PDF
OOP in PHP
Tarek Mahmud Apu
 
PPTX
Ian 20150116 java script oop
LearningTech
 
PDF
Javascript Design Patterns
Subramanyan Murali
 
PDF
Javascript basic course
Tran Khoa
 
PPTX
Object Oriented JavaScript
Julie Iskander
 
PDF
OSCON - ES6 metaprogramming unleashed
Javier Arias Losada
 
PDF
Build Widgets
scottw
 
PDF
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Alena Holligan
 
PPTX
Modular javascript
Zain Shaikh
 
PPTX
JavaScript Literacy
David Jacobs
 
PDF
The many facets of code reuse in JavaScript
Leonardo Borges
 
PDF
Orlando BarCamp Why Javascript Doesn't Suck
erockendude
 
PDF
Say It With Javascript
Giovanni Scerra ☃
 
Enterprise js pratices
Marjan Nikolovski
 
Advance JS and oop
Abuzer Firdousi
 
Javascript Module Patterns
Nicholas Jansma
 
Let's JavaScript
Paweł Dorofiejczyk
 
Uncommon Design Patterns
Stefano Fago
 
[2015/2016] JavaScript
Ivano Malavolta
 
OOP in PHP
Tarek Mahmud Apu
 
Ian 20150116 java script oop
LearningTech
 
Javascript Design Patterns
Subramanyan Murali
 
Javascript basic course
Tran Khoa
 
Object Oriented JavaScript
Julie Iskander
 
OSCON - ES6 metaprogramming unleashed
Javier Arias Losada
 
Build Widgets
scottw
 
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Alena Holligan
 
Modular javascript
Zain Shaikh
 
JavaScript Literacy
David Jacobs
 
The many facets of code reuse in JavaScript
Leonardo Borges
 
Orlando BarCamp Why Javascript Doesn't Suck
erockendude
 
Say It With Javascript
Giovanni Scerra ☃
 
Ad

Recently uploaded (20)

PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Ad

Object Oriented JavaScript

  • 1. Getting from Scripts to Applications Donald J. Sipe | Refresh Jacksonville | November 11 th 2008
  • 2. JavaScript We are here Pseudoclassical Inheritance Hello World!
  • 3. JavaScript What we’ll be talking about OOP Basics Scope Closures Context Appling to OOP Constructors Methods Public Private Privileged
  • 4. But First... Some handy tools Here are some handy things you might not know JavaScript can do: Object-literal notation Anonymous functions Binary assignment Dot-style and array-style access of properties
  • 5. Handy Tools Object Literal Notation— Makes JSON possible // The old way var myObject = new Object(); myObject.val = “test”; // Using object literal notation var myObject = { val: “test” };
  • 6. Handy Tools Object Literal Notation // The old way var myArray = new Array(1, 30, “Refresh”); // Using object literal notation var myArray = [1, 30, “Refresh”];
  • 7. Handy Tools Anonymous Functions In JavaScript, functions are treated as values, which means: Functions can be assigned to variables Functions can be passed as arguments to other functions
  • 8. Handy Tools Anonymous Functions // Using an anonymous function as an argument setTimeout( function () { alert( “Refresh” ); }, 1000 ); // Using a function as a variable var myFunc = function () { alert( “Refresh” ); }; setTimeout(myFunc, 1000);
  • 9. Handy Tools Anonymous Functions : Building a “scope bubble” Using an anonymous function to wrap code you don’t want in the global scope var globalVar = “Refresh”; // Global scope // Create a scope bubble ( function () { var privateVar = “Jacksonville”; alert( globalVar + “ ” + privateVar ); } )(); alert (privateVar == undefined );
  • 10. Handy Tools Binary Assignment Set a default value only if the variable doesn’t have a value yet // Traditional ternary assignment var myVar = myVar ? myVar : 0; // Binary assignment var myVar = myVal || 0;
  • 11. Handy Tools Dot-Style and Array-Style property access var sampleObj = { color: “blue”, width: “16px” }; // Traditional dot-style access alert( sampleObj.color == “blue” ); // Alternative array-style access alert( sampleObj[“width”] == “16px” );
  • 13. Scope Only functions have scope. Blocks ( if , while , for , switch ) do not. All variables are within the global scope unless they are defined within a function . All global variables actually become properties of the window object When variables are not declared using the var keyword, they decared globally.
  • 14. Scope var foo = “orig”; // foo is now a global variable if ( true ) { foo = “new”; // Global foo now equals “new” } // create function to modify its own foo variable function test () { var foo = “old”; } test(); alert( foo == “new” ); // Global foo still equals “new”
  • 15. Scope If you forget to use the var keyword to define a value within a function—even if it’s only used within the function—the value will be defined globally. var foo = “new”; alert( foo == “new” ); // Omitting the var keyword reverts scope // of foo to global level function badTest () { foo = “bad news”; } badTest(); // Global foo now equals “bad news” alert( foo == “bad news” );
  • 16. Scope: Inner Functions Functions can be defined within one another Inner functions have access to the outer function’s variables and parameters. function getRandomInt(max) { var randNum = Math.random() * max; function ceil() { return Math.ceil(randNum); } return ceil(); // Notice that no arguments are passed } // Alert random number between 1 and 5 alert(getRandomInt(5));
  • 17. Closures Inner functions maintain the scope they enjoyed when their parent function was called—even after the parent function has terminated. This allows you to effectively pass variables to functions that may not be called for some time.
  • 18. Closures function delayedAlert (message, delay) { // Set an enclosed callback setTimeout( function () { // Use message variable passed to outer function alert(message); }, delay); } // Display a message with a 5 second delay delayedAlert(“Refresh”, 5000);
  • 19. Context Your code will always be running within the context of another object Context is maintained through the use of the this variable. function increment() { this .x = this .x || 0; return this .x++; }; alert( increment() == 0 ); alert( increment() == 1 );
  • 20. Context var myObject = { set: function (newVal) { this .val = newVal; } }; alert( myObject.val == null ); // val property not set yet myObject.set(“Refresh”); alert( myObject.val == “Refresh” ); // val equals “Refresh” // Change the context of set() to the window object window.set = myObject.set; window.set( “Refresh Jacksonville” ); alert( myObject.val == “Refresh” ); alert( window.val == “Refresh Jacksonville” );
  • 21. Context: Changing Contexts JavaScript provides two handy functions for executing a function within the context of another function: call( ) apply( )
  • 22. Context: Changing Contexts Using call() — Arguments passed by name // Simple function to change the color style of a node function changeColor (newColor) { this .style.color = newColor; } // window.changeColor has no style property, so call fails changeColor( “red” ); // Grab the DOM node with the id “required” var reqField = document.getElementById( “required” ); // Call changeColor() within reqField’s context changeColor.call( reqField, “red” );
  • 23. Context: Changing Contexts Using apply() — Arguments passed as an array // Simple function to change the color style of a node function changeColor (newColor) { this .style.color = newColor; } // Set the text color of the body element function setBodyTextColor () { changeColor.apply( document.body, arguments ); } setBodyTextColor( “black” );
  • 25. Object Oriented Programming Now let’s apply all of this information to a more classical view of OOP in JavaScript: Constructors Object Methods Public Private Privileged
  • 26. About Objects Almost everything written in JavaScript is an object Objects can be though of as a collection of properties—much like a hash in other languages JavaScript doesn’t have a concept of classes like other object-oriented languages Classes are simulated using a concept called prototypal inheritance
  • 27. Constructors Like other languages, JavaScript uses the new operator to create new instances of objects. // Create User object constructor function User ( name ) { this .name = name; } // Create a new instance of a User var me = new User(“Bob”); // Alert new user’s name alert( me.name == “Bob” ); // Cannot call User directly alert( User.name == undefined ); // window.name is undefined
  • 29. Public Methods One way to create a public method—a function that can be freely reference by code outside your object—is to attach it to the object’s prototype . An object’s prototype is a special property that acts as a base reference of your object. This prototype object is copied and applied to all new instances of your object.
  • 30. Public Methods // Our User object written a different way var User = function (name) { this .name = name; } // Add a public accessor method for name User. prototype .getName = function () { return this .name; } var me = new User( “Bob” ); alert( me.getName() == “Bob” );
  • 31. Private Methods Private methods are functions that are only accessible to methods inside your object and cannot be accessed by external code.
  • 32. Private Methods // Our User object with some changes var User = function (name) { this .name = name; function welcome () { alert( “Welcome back, ” + this .name + “.”); } welcome(); } // Create a new User var me = new User( “Bob” ); // Alerts: “Welcome, Bob.” // Fails because welcome is not a public method me.welcome();
  • 33. “ Privileged” Methods The term privileged method was coined by Douglas Crockford. It is not a formal construct, but rather a technique. Privileged methods essentially have one foot in the door: Then can access private methods and values within the object They are also publicly accessible
  • 34. “ Privileged” Methods // Our User object with some tweaks var User = function (name, age) { var year = (new Date()).getFullYear() – age; this .getYearBorn = function () { return year; }; }; // Create a new User var me = new User( “Bob”, 28 ); // Access privileged method to access private year value alert( me.getYearBorn() == 1980 ); // Fails because year is private alert( me.year == null );
  • 35. Grand Finale Using Scope , Closures , Contexts , and what we’ve discussed about OOP, we can dynamically generate classes based on information supplied to the constructor.
  • 36. Grand Finale // Our User object modified to accept an object of properties function User (properties) { // Loop through properties and create getter and setter methods for ( var i in properties ) { function () { this [“get” + i] = function () { return properties[i]; }; this [“set” + i] = function (val) { properties[i] = val; }; })(); } } // Create a new user, automatically creating get and set methods var me = new User( { name: “Bob”, age: 28 });
  • 37. Grand Finale // …continued // Note that name is private within properties alert( me.name == null ); // Access privileged getname() method alert( me.getname() == “Bob” ); // Use the dynamically generated setter // to change the user’s age me.setage(21); alert( me.getage() == 21 );
  • 38.  
  • 39. References Pro JavaScript Techniques, by John Resig Douglas Crockford’s YUI Theater Presentations http://developer.yahoo.com/yui/theater