LoginSignup
12
8

More than 5 years have passed since last update.

ECMAScript 6のクラスのコンストラクタでオブジェクトをreturnしてみる

Posted at

ECMAScript 3より前は知りませんが、ES3以降のJavaScriptのコンストラクタ関数は、new付きで呼ばれていても、returnでオブジェクトを返すとそっちを優先するという、謎機能がありました。

function TestClass() {
    return {
        method: function() {
            console.log("good night");
        }
    }
}

TestClass.prototype.method = function () {
    console.log("good morning");
};

var obj = new TestClass();
obj.method(); // -> good night

ECMAScript 6はそういえばどうなんだろうなーと思ってio.jsの2.0.1で試したみたら、同じ結果になりました。use strictが必要なのね。

"use strict"

class TestClass {
    constructor() {
        return {
            method: function () {
                console.log("good night");
            }
        };
    }

    method() {
        console.log("hello world");
    }
}

var obj = new TestClass();
obj.method(); // -> good night

というわけで、newで呼ばせるんだけど、実体は保存しておいたインスタンスを返すというシングルトンパターンとかは今までどおりできそうです。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8