Skip to content

Instantly share code, notes, and snippets.

@Nully
Last active August 29, 2015 13:58
Show Gist options
  • Select an option

  • Save Nully/10015659 to your computer and use it in GitHub Desktop.

Select an option

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

Nully commented Apr 7, 2014

Copy link
Copy Markdown
Author

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

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