こんばんは。きわさです。
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モードというものがあるようです。