2 ms·
new is a keyword and has various other gotchas. The most egregious is probably is the silent but deadly failure when you forget it altogether: function MyURL
by pmjordan 16y ago
new is a keyword and has various other gotchas. The most egregious is probably is the silent but deadly failure when you forget it altogether:
function MyURL(loc) {
this.location = loc;
}
// benign:
var url1 = new MyURL("http://news.ycombinator.com");
// redirects the user to Hacker News:
var url2 = MyURL("http://news.ycombinator.com");
Calling a free function binds the global object (window in the browser) to the implicit this parameter; assigning a URL to window.location is clearly quite an obvious bug, most cases of forgetting new when calling a constructor are much more subtle. Luckily, you can defend against it in the constructor's code:
function MyURL(loc) {
if (this === (function(){return this;})())
{
// might want to log this during development, too...
return new MyURL(loc);
}
this.location = loc;
}
I strongly recommend reading what Douglas Crockford has written on the topic of JavaScript, or watching his excellent videos. (this from someone who detests video as a medium of conveying this sort of info)