Skip to content

Instantly share code, notes, and snippets.

@Nully
Last active August 29, 2015 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nully/10015659 to your computer and use it in GitHub Desktop.
Save Nully/10015659 to your computer and use it in GitHub Desktop.
ラーメンjs
/**
* 仕様
* 食べることができる
* 注文することができる
* 替え玉することができる
* トッピングができる
  * トッピングは複数種類存在する
* スープを飲むことができる
* プラグインはどんな形式でも問わない
*/
function Ramen(element, options) {
this.init(element);
return element;
}
var prop = Ramen.prototype;
// 味一覧
prop.aji = {
SHOYU: 1,
MISO: 2,
SIO: 3
};
// 面の太さ
prop.hutosa = {
HOSO: 1,
CHU: 2,
HUTO: 3
};
// オプション
prop.options = {
gram: 100, // 100グラム
aji: prop.aji.SHOYU, // 醤油味
hutosa: prop.hutosa.HOSO // 細麺
};
// エラー一覧
prop.errors = {
// 予期せぬ例外
EXCEPTION: 1,
// お客様、そのようなオプションは存在しません、おとといきやがれでございます。
NO_OPTIONS: 100,
// ふえぇ...食べれる麺がないよぅ...
NO_MEN: 200,
};
// エラーメッセージ一蘭
prop.messages = {
prop.errors.NO_OPTIONS: "お客様、そのようなオプションは存在しません、おとといきやがれでございます。",
prop.errros.EXCEPTION: "何かがおかしいようだ",
prop.errors.NO_MEN: "ふえぇ...食べれる麺がないよぅ...",
};
// 初期化
prop.init = function(e, opts) {
this.setElement(e);
this.setOptions(opts);
};
// 要素の設定
prop.setElement = function(e) {
this.element = e;
return this;
};
// 要素の取得
prop.getElement = function() {
return this.element;
};
// オプションの一括設定
prop.setOptions = function(opts) {
var i;
for(i in opts)
this.setOption(i, opts[i]);
return this;
};
// オプションの個別設定
prop.setOption = function(k, v) {
if(!this.options.hasOwnProperty(k)) {
return this.error(prop.errors.NO_OPTIONS);
}
this.options[k] = v;
return this;
};
// 全てのオプションを取得
prop.getOptions = function() {
return this.options;
};
// 個別のオプションを取得
prop.getOption = function(k) {
if(!this.options.hasOwnProperty(k)) {
return this.error(prop.errors.NO_OPTION);
}
return this.options[k];
};
// オーダーエラー
prop.error = function(errorNo) {
switch(errorNo) {
case prop.errors.NO_OPTIONS:
alert(this.getMessage(errorNo));
break;
case prop.errors.NO_MEN:
alert(this.getMessage(errorNo));
break;
default:
alert(this.getMessage(errorNo));
break;
}
};
// 食す
prop.eat = function(eatGram) {
var g = this.getOption("gram");
// 食べれる麺が無い
if(g <= 0) {
return this.error(prop.errors.NO_MEN);
}
// 麺を減産していく
this.setOption("gram", this.getOption("gram") - eatGram);
return this;
};
var ramen = new Ramen(this);
// 麺を100グラム食べる
ramen.eat(100);
@Nully
Copy link
Author

Nully commented Apr 7, 2014

ラーメン好きなユーザーのprototype拡張を用いたjsです。
ラーメンが好きな方はラーメンを通じてprototype拡張を学んでみましょう!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment