Possible Duplicate:
What underlies this JavaScript idiom: var self = this?
I am confused that when to use self and this in javascript.
I know that this refers to current context and self refers to current window.
As I am developing an application in Titanium. I want to know when to use self or this
OR does is there is any concept of self in titanium development.
here is the sample code that i am doing in my titanium commonJS module
var auth = require('/SDKTest/auth');
var nodeAPI = require('/SDKTest/nodeAPI');
function myAPI() {
this.auth = auth;
this.nodeAPI = nodeAPI;
return this;
}
module.exports = myAPI;
This code works, but can I use self in place of this ? And instead of using this i can create a namespace and do something like this:
function myAPI() {
var api = {};
api.auth = auth;
api.nodeAPI = nodeAPI;
return api;
}
both the approaches work but what is the use of using this over here
The keyword self is used to refer to the current class itself within the scope of that class only whereas, $this is used to refer to the member variables and function for a particular instance of a class.
In the JavaScript, “self” is a pattern to maintaining a reference to the original “this” keyword and also we can say that this is a technique to handle the events. Right now, “self” should not be used because modern browsers provide a “self” as global variable (window.
self refers to the global scope - If the context is a window it will refer to window. self, while in case of a non-windowed context it will refer to the global scope of that context (e.g. in service worker code, self refers to the worker global scope).
self can refer to the window object, but typically that's not the case here. You'll see this commonly above that setTimeout() : var self = this; They're keeping a reference to the current object, so later when you call self.
self
is not a JavaScript keyword! Programmers use that when defining classes to have always valid reference to object itself.
var Person = function() {
var self = this;
// private function
function say(what) {
alert(what);
}
self.fetchSomething = function() {
var xhr = Ti.Network.createHTTPClient({
onload: function() {
// in this case 'this' is referencing to xhr!!!
say(this.responseText);
}
});
xhr.open('GET', 'http://www.whatever.com');
xhr.send();
}
return self;
}
var p = new Person();
p.fetchSomething();
Your question is somewhat confusing, it's like asking: Do I buy apples or tomatoes? The answer is, it really depends on what you want to do, since they're completely different.
Essentially, you have answered your own question to some extent, because you already know the differences between the two:
this
refers to the current contextself
refers to window
function myAPI() {
this.auth = auth;
this.nodeAPI = nodeAPI;
return this;
}
module.exports = myAPI;
You're asking whether you can use self
instead. Think about it, what does this
allow you to do? It allows you, to refer to the context. What is the context, well, it's module
when you call module.exports()
. And module
is most likely not going to be window
, so no, you can't use self
here.
Does that answer the question?
The second code example seems to do something completely different. I don't know what to make of that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With