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

PPTX
Understanding Object Oriented Javascript - Coffee@DBG June
Deepu S Nath
 
PPT
Beginning Object-Oriented JavaScript
Stoyan Stefanov
 
PPT
Advanced Javascript
Adieu
 
PPT
Advanced JavaScript
Stoyan Stefanov
 
PDF
Object Oriented JavaScript
Michael Girouard
 
PPTX
Advanced JavaScript
Nascenia IT
 
PPT
JavaScript In Object Oriented Way
Borey Lim
 
PPT
Advanced JavaScript
Fu Cheng
 
Understanding Object Oriented Javascript - Coffee@DBG June
Deepu S Nath
 
Beginning Object-Oriented JavaScript
Stoyan Stefanov
 
Advanced Javascript
Adieu
 
Advanced JavaScript
Stoyan Stefanov
 
Object Oriented JavaScript
Michael Girouard
 
Advanced JavaScript
Nascenia IT
 
JavaScript In Object Oriented Way
Borey Lim
 
Advanced JavaScript
Fu Cheng
 

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
 
Ad

Similar to Object Oriented JavaScript (20)

PPTX
Advance JS and oop
Abuzer Firdousi
 
PPT
JavaScript - Programming Languages course
yoavrubin
 
PDF
Rediscovering JavaScript: The Language Behind The Libraries
Simon Willison
 
PPTX
Lecture 4- Javascript Function presentation
GomathiUdai
 
PDF
The mighty js_function
timotheeg
 
PPTX
Ajaxworld
deannalagason
 
PPTX
oojs
Imran shaikh
 
PPT
eXo SEA - JavaScript Introduction Training
Hoat Le
 
PPTX
Awesomeness of JavaScript…almost
Quinton Sheppard
 
PDF
JS OO and Closures
Jussi Pohjolainen
 
KEY
The JavaScript Programming Primer
Mike Wilcox
 
PPT
Javascript quiz. Questions to ask when recruiting developers.
Alberto Naranjo
 
PDF
Javascript basic course
Tran Khoa
 
PPTX
Object Oriented Javascript part2
Usman Mehmood
 
PPTX
Object oriented java script
vivek p s
 
PPTX
JavaScript OOPS Implimentation
Usman Mehmood
 
PPT
Basic Javascript
Bunlong Van
 
PPT
Goodparts
damonjablons
 
PPT
Douglas Crockford Presentation Goodparts
Ajax Experience 2009
 
Advance JS and oop
Abuzer Firdousi
 
JavaScript - Programming Languages course
yoavrubin
 
Rediscovering JavaScript: The Language Behind The Libraries
Simon Willison
 
Lecture 4- Javascript Function presentation
GomathiUdai
 
The mighty js_function
timotheeg
 
Ajaxworld
deannalagason
 
eXo SEA - JavaScript Introduction Training
Hoat Le
 
Awesomeness of JavaScript…almost
Quinton Sheppard
 
JS OO and Closures
Jussi Pohjolainen
 
The JavaScript Programming Primer
Mike Wilcox
 
Javascript quiz. Questions to ask when recruiting developers.
Alberto Naranjo
 
Javascript basic course
Tran Khoa
 
Object Oriented Javascript part2
Usman Mehmood
 
Object oriented java script
vivek p s
 
JavaScript OOPS Implimentation
Usman Mehmood
 
Basic Javascript
Bunlong Van
 
Goodparts
damonjablons
 
Douglas Crockford Presentation Goodparts
Ajax Experience 2009
 
Ad

Recently uploaded (20)

PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PDF
This slide provides an overview Technology
mineshkharadi333
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Software Development Methodologies in 2025
KodekX
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PPTX
IoT Sensor Integration 2025 Powering Smart Tech and Industrial Automation.pptx
Rejig Digital
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
This slide provides an overview Technology
mineshkharadi333
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Software Development Methodologies in 2025
KodekX
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
IoT Sensor Integration 2025 Powering Smart Tech and Industrial Automation.pptx
Rejig Digital
 

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