JSFiddle - React, Tailwind, and code Playground

by Atsushi Nakatsugawa

HTML

<script src="https://moongift.s3.amazonaws.com/hifive/1.3.1/h5.dev.js"></script>
<link rel="stylesheet" href="https://moongift.s3.amazonaws.com/hifive/1.3.1/h5.css">
<script src="https://moongift.s3.amazonaws.com/hifive/1.3.1/ejs-h5mod.js"></script>
<h1>
hifive クラス実験場
</h1>
<p><strong>こちらは犬(ハチ)です</strong></p>
<input type="text" id="dog" size="50" /><br />
<p><strong>こちらは猫(タマ)です</strong></p>
<input type="text" id="cat" size="50" />
<p><strong>こちらは動物クラスです</strong></p>
<input type="text" id="animal" size="50" />

JavaScript

$(function() {
  var AnimalClass = h5.cls.RootClass.extend(function (super_) {
    return {
    
      // クラス名(完全修飾名)
      name: 'AnimalClass',
      isAbstract: true,
      
      // クラスのフィールド定義
      field: {
        _name: null
      },
      
      // クラスのメソッド定義
      method: {
        constructor: function (params) {
        	// 親クラスのコンストラクタ呼び出し
          super_.constructor.call(this);          
        	this._name = params;
        },
        hello: function() {
        	return this._name;
        },
        cry: function(name, voice) {
        	return name + "'s crying voice is " + voice;
        }
      }
    };
  });
  
  var DogClass = AnimalClass.extend(function (super_) {
  	return {
    	name: 'DogClass',
      field: {
      	_voice: {
        	defaultValue: 'bow wow'
        }
      },
      method: {
        constructor: function (params) {
          super_.constructor.call(this, params);
        },
        cry: function() {
        	return super_.cry(this._name, this._voice);
        }
      }
    }
  });

  var CatClass = AnimalClass.extend(function (super_) {
  	return {
    	name: 'CatClass',
      field: {
      	_voice: {
        	defaultValue: 'mew'
        }
      },
      method: {
        constructor: function (params) {
          super_.constructor.call(this, params);
        },
        cry: function() {
        	return super_.cry(this._name, this._voice);
        }
      }
    }
  });


  h5.u.obj.expose('Animal', {
  	AnimalClass: AnimalClass,
    DogClass: DogClass,
    CatClass: CatClass,
  });
});

$(function() {
  var dog = Animal.DogClass.create('Hachi');
  $("#dog").val(dog.cry());

  var cat = Animal.CatClass.create('Tama');
  $("#cat").val(cat.cry());
  
  try {
	  var animal = Animal.AnimalClass.create();
  }catch(e) {
  	$("#animal").val(e);
  }
  
});