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

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

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

JavaScriptの模擬クラスについて

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■86878 / inTopicNo.1)  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:[<<<なまえ>>>]

引用返信 編集キー/
■87062 / inTopicNo.2)  Re[1]: JavaScriptの模擬クラスについて
□投稿者/ Sasaki (7回)-(2018/04/10(Tue) 11:32:15)
No86878 (Sasaki さん) に返信
> いつもありがとうございます。
> 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:[<<<なまえ>>>]
>
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ