Context


What happens if a function is an object property?
 var katana = { 
   isSharp: true, 
   use: function(){ 
     this.isSharp = !this.isSharp; 
   } 
 }; 
 katana.use();
 assert( !katana.isSharp, "Verify the value of isSharp has been changed." );

What exactly does context represent?
 function katana(){ 
   this.isSharp = true; 
 } 
 katana(); 
 assert( isSharp === true, "A global object now exists with that name and value." ); 
  
 var shuriken = { 
   toss: function(){ 
     this.isSharp = true; 
   } 
 }; 
 shuriken.toss(); 
 assert( shuriken.isSharp === true, "When it's an object property, the value is set within the object." ); 

How can we change the context of a function?
 var object = {}; 
 function fn(){ 
   return this; 
 } 
 assert( fn() == this, "The context is the global object." ); 
 assert( fn.call(object) == object, "The context is changed to a specific object." ); 

Different ways of changing the context:
 function add(a, b){ 
   return a + b; 
 } 
 assert( add.call(this, 1, 2) == 3, ".call() takes individual arguments" ); 
 assert( add.apply(this, [1, 2]) == 3, ".apply() takes an array of arguments" ); 

QUIZ: How can we implement looping with a callback?
 function loop(array, fn){ 
   for ( var i = 0; i < array.length; i++ ) {
     // Implement me!
   }
 } 
 var num = 0; 
 loop([0, 1, 2], function(value, i){ 
   assert(value == num++, "Make sure the contents are as we expect it."); 
   assert(this instanceof Array, "The context should be the full array.");
 }); 

A possible solution for function looping:
 function loop(array, fn){ 
   for ( var i = 0; i < array.length; i++ ) 
     fn.call( array, array[i], i );
 } 
 var num = 0; 
 loop([0, 1, 2], function(value, i){ 
   assert(value == num++, "Make sure the contents are as we expect it."); 
   assert(this instanceof Array, "The context should be the full array.");
 }); 

[b]

你可能感兴趣的:(java)