Confusing JavaScript statement: "var x = new this();"
Question by user419125
I thought I understood the concept of the JavaScript prototype object, as well as [[proto]] until I saw a few posts regarding class inheritance.
Firstly, “JavaScript OOP – the smart way” at http://amix.dk/blog/viewEntry/19038
See the implementation section:
var parent = new this('no_init');
And also “Simple JavaScript Inheritance” on John Resig’s great blog.
var prototype = new this();
What does new this();
actually mean?
This statement makes no sense to me because my understand has been that this
points to an object and not a constructor function. I’ve also tried testing statements in Firebug to figure this one out and all I receive is syntax errors.
My head has gone off into a complete spin.
Could someone please explain this in detail?
Answer by strager
AJS.Class
effectively* translates this:
var Person = new AJS.Class({
init: function(name) {
this.name = name;
Person.count++;
},
getName: function() {
return this.name;
}
});
Person.count = 0;
into this:
var Person = function (name) {
this.name = name;
Person.count++;
};
Person.prototype = {
getName: function() {
return this.name;
}
};
Person.extend = AJS.Class.prototype.extend;
Person.implement = AJS.Class.prototype.implement;
Person.count = 0;
Therefore, in this case, this
in AJS.Class.prototype.extend
refers to Person
, because:
Person.extend(...);
// is the same as
Person.extend.call(Person, ...);
// is the same as
AJS.Class.prototype.extend.call(Person, ...);
* There are a lot of cases I don’t go over; this rewrite is for simplicity in understanding the problem.
Answer by Starx
see this link http://www.quirksmode.org/js/this.html It will tell you about the this keyword, but I am not sure what this() is, may be its some kind of user defined function…… that you are not aware of…