Last active
August 29, 2015 13:58
-
-
Save Nully/10015659 to your computer and use it in GitHub Desktop.
ラーメンjs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 仕様 | |
* 食べることができる | |
* 注文することができる | |
* 替え玉することができる | |
* トッピングができる | |
* トッピングは複数種類存在する | |
* スープを飲むことができる | |
* プラグインはどんな形式でも問わない | |
*/ | |
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); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ラーメン好きなユーザーのprototype拡張を用いたjsです。
ラーメンが好きな方はラーメンを通じてprototype拡張を学んでみましょう!!