Changing Context Of JavaScript Functions Using Call() And Apply()

// Create a global variable for context
var context = "Global (ie. window)";
// Create an object.
var objectA = {
  context: "Object A"
};
// Create another object.
var objectB = {
  context: "Object B"
};
// Define a function that uses an argument AND a reference
function testContext( approach ){
  console.log( approach, "==> THIS ==>", this.context );
}
             
// Invoke the unbound method with standard invocation.
testContext( "testContext()" );
              
// Invoke it in the context of Object A using call().
testContext.call(
    objectA,
    ".call( objectA )"
); 
          
// Invoke it in the context of Object B using apply().    
 testContext.apply(
     objectB,
     [ ".apply( objectB )" ]
);

objectA.testContext = testContext;
// Invoke it as a property of object A.
objectA.testContext( "objectA.testContext()" );

// Invoke it in the context of Object B using call.
objectA.testContext.call(
     objectB,
     "objectA.testContext.call( objectB )"
);

// Invoke it in the context of Window using apply.
objectA.testContext.apply(
     window,
     [ "objectA.testContext.apply( window )" ]
);
Advertisements

Published by

shiyam

My passion became my profession , I'm a driven, energetic and proactive tech professionally. I consider myself an engagement professional, as I don't simply provide solutions, I create them. I am a continuous learner – always looking for new technologies, in my spare time I search Google for the latest trends . I like to think of myself as a futurist and I'm a Full Stack JavaScript Developer. >> Skills << ✔ Web App Development ✔ Strong Javascript ✔ Backbone.js, Angular.js, Dojo.js ✔ jQuery.js ✔ Node.js ✔ MongoDb , MySql ✔ Socket.io / Web Sockets (Native) ✔ PHP ✔ Ruby (Watir - Automation) ✔ Grunt ✔ Github , Bitbucket , SVN ✔ Agile Process ✔ Scrum ✔ Ability to research and adapt new techs ✔ Fast Learner ✔ Always Punctual ✔ Critical Thinker ✔ Friendly Personality

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s