var foo = {
first: function(){
console.log('I am first');
},
second: function(){
console.log('I am second');
},
};
foo.first();
foo.second();
Everything works fine.
Now there is a need for function second to call function first. Try this and it will fail.
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
console.log('I am second');
first();
},
};
foo.second();
One way to fix this problem is to hardcode value foo inside the second function. Following code works.
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
console.log('I am second');
foo.first();
},
};
foo.second();
Above code works but hardcoding the value of foo inside the object literal is not good. A better way would be to replace the hardcoded name with this .
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
console.log('I am second');
this.first();
},
};
foo.second();
All is good.
Chasing this
Javascript allows one to create function inside a function. Now I am changing the implementation of method second. Now this method would return another function.
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
return function(){
this.first();
}
},
};
foo.second()();
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
return function(){
this.first();
}
},
};
foo.second()();
var foo = {
first: function(){
console.log('I am first');
},
second: function(){
var self = this;
return function(){
self.first();
}
},
};
foo.second()();
Sunday, August 18, 2013
'this'
Labels:
Javascript
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment