フロントエンドエンジニア芸人もりたけんじのJavaScript【JavaScript】JavaScript中級者の為の練習問題集261問(脱初心者へ)2016/09/10更新

【JavaScript】引き出しを増やすため「JavaScriptパターン」をなぞる

【JavaScript】引き出しを増やすため「JavaScriptパターン」をなぞる

最近コードリーディングの力を上げるために、
いろいろなJavaScriptの書き方。パターンを学んでいます。
読むだけでなく実際写経してあーなるほどなって理解したい。
いろいろな人のいろいろな書き方を実際書いてみて、
回路を辿って、自分の中の引き出しを増やす。
で、こういうときこういう書き方あったよなとか
あ、あのパターンに似ているなとか
そうなればいいね。

//オブジェクトの作成パターン
//プライベート関数をパブリックメソッドとして開示する
//モジュール開示パターン
revealing module pattern
[code language="javascript"]
var myarry;
(function(){
//プライベートな変数と関数を2つずつ定義
var astr = "[object Array]",
      toString = Object.prototype.toString;
function isArray(a){
     return toString.call(a) === astr;
}
function indexOf(haystack, needle){
var i = 0,
max = haystack.length;
for(; i< max; i +=1){
if(haystack[i]=== needle){
return i;
}
}
return -1;
}
//パグリックな利用に適すると判断した機能をmyarrayに追加する
myarry = {
isArray: isArray,
indexOf: indexOf,
inArray: indexOf//上と同じ関数を渡している
}
}());

myarry.indexOf(["a","b","c"], "z")
//-1
myarry.indexOf(["a","b","c"], "a")
//0
myarry.indexOf(["a","b","c"], "b")
//1
myarry.isArray([1,2]);
//true
myarry.isArray({0: 1});
//false

myarry.indexOf = null;//ここで不測の事態がおきてる。。
myarry.inArray(["a","b","c"], "z")//でも大丈夫 同じ関数を渡しているから
-1
[/code]

JavaScriptパターン