Javascriptのコンストラクタ作成時のメモ

こんばんは。きわさです。

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モードというものがあるようです。

スポンサーリンク