The new
keyword is a relatively simple but extremely useful part of JavaScript's class system. The first thing that you need to understand about new is that it doesn't create objects in the same way as other languages. In JavaScript, every variable is either a function, object, or primitive, which means that when we refer to a class, what we're really referring to is a specially designed initialization function. Creating this class-like function is as simple as defining a function that modifies this and then using the new keyword to call that function.
Normally, when you call a function, its this is obvious. For instance, when you call the turnPage
method of a book object, the this
method inside turnPage
will be set to this book object, as shown here:
var simpleBook = {currentPage: 3, pages: 60}; simpleBook.turnPage = function() { this.currentPage += 1; return this.currentPage; } simpleBook.turnPage(); // == 4
Calling a function that isn't attached to an object (in other words, a function that is not a method) results in this being set to the global scope. In a web browser, this means the window object:
var testGlobalThis = function() { alert(this); } testGlobalThis(); // alerts window
When we use the new
keyword before calling an initialization function, three things happen (well, actually four, but we'll wait to explain the fourth one until we explain prototypes):
{}
)for usthis
method inside the initialization function to the newly created objectAs you can see, although the new
keyword is simple, it's nevertheless important because it allows you to treat initialization functions as if they really are actual classes. At the same time, it does so without violating the JavaScript principle that all variables must either be a function, object, or primitive.
18.217.68.197