こんばんは。きわさです。
javascriptでコンストラクタ作成時のメモです。
次のような関数を作ったとします。
function TestObject(a, b) {
    this.a = a;
    this.b = b;
    return this;
} 
これを使用する場合は
var test = new TestObject("test", "object");
のように使うことを想定しています。
もし、この new を付け忘れると、意図しない動作となってしまいます。
次のようなコードを実行してみます。
console.log(window.a);
var test = TestObject("test", "object");
console.log(window.a);
window.a という定義はないので、2回とも undefined が出力されるはずですが、実際はそうではありません。
undefined
test
と出力されるはずです。
TestObject は new を付けて呼び出すと、this は生成したインスタンスを指しますが、new がないと this は window を指すようです。
そのため、TestObject では window.a と window.b を設定しているのです。
new を付け忘れなければ良い話ですが、以下のように関数に一行追加することで、エラーとすることができます。
function TestObject(a, b) {
    'use strict';
    this.a = a;
    this.b = b;
    return this;
} 
機能を制限する、strictモードというものがあるようです。
