C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86878 / )  JavaScriptの模擬クラスについて
□投稿者/ Sasaki (6回)-(2018/03/30(Fri) 09:41:31)

分類:[JavaScript] 

いつもありがとうございます。
JavaScriptのクラス(クラスもどき)について、より良い方法はないか、お聞きしたいです。
いろいろなサイトを参考にして、クラスのひな形を以下のように作りました。
一応それらしく動作するのですが、さらに良い方法はないか、もしくは致命的な問題を抱えていないかなど、
ご意見ありましたら、教えていただけないでしょうか。
JavaScriptのバージョンはES5を想定しています。
よろしくお願いします。

////////////////////////////////////////////////////////////////////////////////
var My_lib = My_lib || {};	// NameSpace
My_lib.createObject = function(proto) {
  var func = function() {};
  if(proto) {
    func.prototype = proto;
  }
  return new func();
};

////////////////////////////////////////////////////////////////////////////////
// JavaScriptのクラスのサンプル(ひな形)
My_lib.SampleClass = (function() {
  // Constructor
  var clazz = function SampleClass(name) {
    if(!(this instanceof clazz)) {
      // 呼び出し元で、new演算子を付け忘れた場合の処理
      // return new My_lib.SampleClass(name); を模擬。コンストラクタの引数の数が変わっても、コピペできるようにしています。
      var obj = My_lib.createObject(clazz.prototype);
      clazz.apply(obj, arguments);
      return obj;
    }

    // Public Field.
    this.name = name;
  };

  // Pbulic Instance Method.
  clazz.prototype.getName = function() {
    return this.name;
  };

  // Public Static Method.
  clazz.wrap = function (text) {
    return '<<<' + text + '>>>';
  };

	return clazz;
})();

// 使用例
var sample = new My_lib.SampleClass('なまえ');
console.log('Name:[' + My_lib.SampleClass.wrap(sample.getName()) + ']');
// 実行結果>>> Name:[<<<なまえ>>>]

返信 編集キー/


管理者用

- Child Tree -