Created
December 18, 2012 06:23
-
-
Save illnino/4325558 to your computer and use it in GitHub Desktop.
http://net.tutsplus.com/tutorials/javascript-ajax/fully-understanding-the-this-keyword/ 1. 'this' in javascript, when to use that to store a reference of the object
2. 'call'
3. 'apply', the same as 'call'. except last param needs to be an array
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html><html lang="en"><body><script> | |
var myObject = {}; | |
var myFunction = function(param1, param2) { | |
//setviacall()'this'points to my Object when function is invoked | |
this.foo = param1; | |
this.bar = param2; | |
console.log(this); //logs Object{foo = 'foo', bar = 'bar'} | |
}; | |
myFunction.call(myObject, 'foo', 'bar'); // invoke function, set this value to myObject | |
console.log(myObject) // logs Object {foo = 'foo', bar = 'bar'} | |
</script></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html><html lang="en"><body><script> | |
var Person = function(name) { | |
this.name = name || 'johndoe'; // this will refer to the instanc ecreated | |
} | |
var cody = new Person('Cody Lindley'); // create an instance, based on Person constructor | |
console.log(cody.name); // logs 'Cody Lindley' | |
</script></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html><html lang="en"><body><script> | |
var Person = function(name) { | |
this.name=name||'johndoe'; | |
} | |
var cody = Person('Cody Lindley'); // notice we did not use 'new' | |
console.log(cody.name); // undefined, the value is actually set at window.name | |
console.log(window.name); // logs 'Cody Lindley' | |
</script></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html><html lang="en"><body><script> | |
var Person = function(x){ | |
if(x){this.fullName = x}; | |
}; | |
Person.prototype.whatIsMyFullName = function() { | |
return this.fullName; // 'this' refers to the instance created from Person() | |
} | |
var cody = new Person('cody lindley'); | |
var lisa = new Person('lisa lindley'); | |
// call the inherited whatIsMyFullName method, which uses this to refer to the instance | |
console.log(cody.whatIsMyFullName(), lisa.whatIsMyFullName()); | |
/* The prototype chain is still in effect, so if the instance does not have a | |
fullName property, it will look for it in the prototype chain. | |
Below, we add a fullName property to both the Person prototype and the Object | |
prototype. See notes. */ | |
Object.prototype.fullName = 'John Doe'; | |
var john = new Person(); // no argument is passed so fullName is not added to instance | |
console.log(john.whatIsMyFullName()); // logs 'John Doe' | |
</script></body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html><html lang="en"><body><script> | |
var myObject = { | |
myProperty:'Icanseethelight', | |
myMethod:function() { | |
var that=this; //store a reference to this (i.e.myObject) in myMethod scope varhelperFunctionfunction(){//childfunction | |
var helperFunction function() { //childfunction | |
//logs 'I can see the light' via scope chain because that=this | |
console.log(that.myProperty); //logs 'I can see the light' | |
console.log(this); // logs window object, if we don't use "that" | |
}(); | |
} | |
} | |
myObject.myMethod(); // invoke myMethod | |
</script></body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment